@property 、@synthesize 、@dynami
2018-09-14 本文已影响8人
kelvin943
@property
本身只是生成 setter/getter 方法的声明
@synthesize
定义成员变量的名称
并且自动生成setter/getter 方法的实现 (用于.m文件中)
@synthesize的写法有一下几种 :
@synthesize ivar ; // 定义成员变量名称:ivar
@synthesize ivar = ivar; // 定义成员变量名称:ivar
@synthesize ivar = _ivar; // 定义成员变量名称:_ivar
@synthesize ivar = abcdeft; // 定义成员变量名称:abcdeft
iOS 6 之后 LLVM 编译器引入property autosynthesis,即属性自动合成 ,一般情况下只写了@property 就会在 .m 中自动生成 @synthesize 属性名 = _属性名 ,而不是 @property 本身帮我们生成 setter/getter 方法
当@property写在协议@protocol中时候编译器(LLVM)并不会帮我们引入@synthesize 需要我们手动指定,不然在调用的时候回报找不到setter/getter 方法
@dynamic
如果不想编译器自作主张生成这些setter和getter方法,则使用@dynamic。