synthesize

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 中定义的所有属性
  • 重载的属性

推荐阅读更多精彩内容