笔试题2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔试题2相关的知识,希望对你有一定的参考价值。

1.@property @synthesize的含义以及误区。

 答:@property的作用是定义属性,声明getter,setter方法。(注意:属性不是变量)

       @synthesize的作用是实现属性的,如getter,setter方法.

在声明属性的情况下如果重写setter,getter,方法,就需要把未识别的变量在@synthesize中定义,把属性的存取方法作用于变量。如:

.h文件中

@property (nonatomic,assign)NSInteger age;
@property (nonatomic,retain)NSString * name;
@property (nonatomic,copy)NSString * bb;

.m文件中

//如果不加以下三行,就报会找不到_age,_name,_bb变量的错误
@synthesize age = _age;
@synthesize name = _name;
@synthesize bb =_bb;
- (void)setName:(NSString *)name
{ if (_name!=name) {
[_name release];
_name = [name retain]; }
}
- (NSString *)name{
return [[_name retain] autorelease]
;}
- (void)setAge:(NSInteger)age{
_age = age;}
- (NSInteger)age{ return _age;}
- (void)setBb:(NSString *)bb{
if (_bb!=bb) { [_bb release]; _bb = [bb copy]; }
}
- (NSString *)bb{
return [[_bb retain]autorelease];
}

总结:一定要分清属性和变量的区别,不能混淆。@synthesize 声明的属性=变量。意思是,将属性的setter,getter方法,作用于这个变量。

 2.一个对象的dealloc方法在什么时候调用?

你自己不应该 dealloc 任何对象,objective-c 里面通过reference counting来管理memory,当一个对象的 reference counting=0时,系统自动会调用dealloc释放此对象,所以在没有auto reference counting 下,你用release, retain就好了,不用dealloc。

auto reference counting(ARC)
然而现在随着ARC的推广,当你不再用一个对象时,编译器(compiler)会自动检查你的代码,看你是否还需要此对象与否,所以现在连retain,release都不用了,有点类似java里面的garbage collection, 但跟java garbage collection又有不同,因为ARC 不管reference cycles,你需要用week,strong来调整reference cycles,不过这里就不多讲了

3.

分类category能够向一个已有的类中添加方法。

一个类中可以添加多个分类,分类可以单独创立一个文件,也可以写在原有类中。

 拓展extensions(匿名的分类)是向当前类中添加私有变量,私有方法。方法放在主实现区实现。外类不能调用,自身类可以调用。 如下,。m文件下声明,并实现。

技术分享

 

4,

@protocol 协议名-(void) go;----1

@optional

-(void) stop;     -----2
@required
-(void) start; -----3
@end
1这种什么都不写的就是必须实现的方法,2这种是可选择实现的,也就是说你实现也可以,不实现也可以,3这种是必须实现的方法,跟第一种一样;因为@protocol默认的是必须实现的,所以[email protected]可以不写,可以把3放在和1在一起表示这2个方法必须实现

5. 

以上是关于笔试题2的主要内容,如果未能解决你的问题,请参考以下文章

IT笔试题

.NET笔试题集

c/c++C语言笔试题总结2

java笔试题

JS笔试题

多线程关于腾讯笔试题