前言:
在使用@property定义属性时,有两个对应的关键字,即
@synthesize
与@dynmic
,如果都没有使用这两个关键字时,它有个默认值是@syntheszie var = _var;
@synthesize与@dynmic的区别:
-
@synthesize
让编译器自动生成getter/setter方法。 -
@dynmic
让编译器不自动生成getter/setter方法 -
@synthesize
可以使用成员变量方式去访问和赋值,如_var = @"xx";
,而@dynmic
不可以,因为它不会自动合成成员变量。
用法:
@synthesize
:
// 自动生成getter/setter方法,合成成员变量(可使用_var方式访问属性)
@synthesize var = _var;
// 自动生成getter/setter方法,不合成成员变量(不可使用_var方式访问属性)
@synthesize var;
@dynmic
:
// 不自动生成getter/setter方法,不合成成员变量(不可使用_var方式访问属性)
@dynmic var;
// 语法错误,不允许这么定义
@dynmic var = _var;
使用场景:
- 父类定义了某个属性,子类想重新定义这个属性时,需要明确使用
@synthesize
或@dynmic
,不然会有警告。但是具体是使用哪一个,就看你需不需要getter/setter方法了。 - CoreData定义属性都用
@dynamic
,CoreData会在运行时动态为所有属性生成getter/setter方法,所以使用@dynamic
告诉编译器不要自动生成getter/setter方法。
网友评论