synthesize
在这里总结一下这个常用的关键字
首先:
实例变量 = 成员变量 = ivar
一般如果了属性的时候,编译器会自动编写访问属性需要的方法,这个过程叫做自动合成。除了生成代码之外,编译器还会自动向类中添加适当类型的实例变量,并且在属性的前面加下划线,作为实例变量的名字。
@interface CCObject :NSOject
@property NSString *name;
@end
在上面的代码中会生成一个实例变量:_name
。这时候 synthesize 关键字允许我们来指定这个实例变量的名字:
@implementation CCObject
@synthesize name= _myName;
@end
这样本来实例名字是_name
就会变成_myName
了,一般情况下就使用默认的名字就好了。
如果用关键字置顶的成员变量的名字已经存在了,那么就不回再生成实例了。
那在什么情况下我们需要主动使用 synthesize 呢。
在上面我们说到,编译器会自动帮我们自动合成实例变量,那么什么时候不回自动合成,什么时候我们就应该会使用 synthesize,不回自动合成的情况有:
- 同时重写了 setter 和 getter方法
- 重写了 readonly 属性的 getter
- 使用了 @dynamic
- 在 @protocol 中定义的所有属性
- 在 category 中定义的所有属性
- 重载的属性