@property
如果我们使用@property,在.m 中@dynamic和@synthesize 均不写
默认是@syntheszie var = _var;
编译器自动实现:
1.生成getter和setter的声明;
2.生成_name的成员变量;
3.生成getter和setter的实现;
@property (nonatomic, strong) NSString *name; // 属性定义
-(void)setName:(NSString *)name {
if (_name!= name) {
_name = name;
}
}
-(NSString *)name {
return _name;
}
@ synthesize
@synthesize的语义:如果没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法。如果实现那么取你实现的setter方法和getter方法。
@synthesize name = _testName; // 使用属性后,自定义成员变量名称,可以进行更名
-(void)setName:(NSString *)name {
if (_testName != name) {
_testName = name;
}
}
-(NSString *)name {
return _testName;
}
@dynamic
@dynamic告诉编译器,属性的setter与getter方法用户自己实现,不自动生成。
如果没有提供@setter方法和@getter方法,编译的时候没问题。
但是当使用点语法设置值或取值时会崩溃
@property (nonatomic, strong) NSString *name; // 属性定义
@implementation Person {
NSString *_testName; // 成员变量名称,自定义
}
@dynamic name;
-(void)setName:(NSString *)name {
if (_testName != name) {
_testName = name;
}
}
-(NSString *)name {
return _testName;
}
网友评论