Mr.Cao 提出的百度面试题,以及自己从网上找的答案

  1.  这个写法会出什么问题:@property (copy) NSMutableArray *array;

Answer From Aston:

当给这个属性设置值的时候,会调用set方法,使用copy关键字修饰的属性的set方法有这句代码:

_array = [array copy];

此时会报错,因为copy返回的是不可变的内容,可变内容需要mutableCopy,

解决办法一般是mutable属性设置为strong,

如果非要copy,可以覆盖set方法,_array = [array mutableCopy];


2. @synthesize和@dynamic分别有什么作用?

在声明property属性后,有2种实现选择

@synthesize

编译器期间,让编译器自动生成getter/setter方法。

当有自定义的存或取方法时,自定义会屏蔽自动生成该方法

 

@dynamic

告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告

然后由自己实现存取方法

或存取方法在运行时动态创建绑定:主要使用在CoreData的实现NSManagedObject子类时使用,由Core Data框架在程序运行的时动态生成子类属性

3. 

@protocol 和 category 中如何使用 @property

  • 个人理解:protocol 中的属性可以直接声明,可以用于实现多继承,表示遵循这个协议的都有这个属性,而且可以覆盖set.get方法,实现protocal属性和自身属性的关联

  • category中主要使用runtime的Associative References技术参见这篇文章:http://m.blog.csdn.net/blog/u010306571/25152885

4.未完待续---2015-7-7日


你可能感兴趣的:(Mr.Cao 提出的百度面试题,以及自己从网上找的答案)