通常我们会这样做:
在Test.h中:
@interface Test : NSObject{
NSString *_name;
}
@property(nonatomic,retain) NSString *name;
@end
在Test.m中:
@implementation Test
@synthesize name = _name;
@end
解析:使用@synthesize之后,编译器会自动帮我们生成setter和getter方法。
另一种情况:
在Test.m中:
@implementation Test
@dynamic name;
- (void)setName:(NSString *)newName
{
if (_name != newName) {
[newName retain];
[_name release];
_name = newName;
}
}
- (NSString *)name
{
return _name;
}
@end
解析:使用@dynamic,作用是告诉编译器我们自己定义setter和getter方法。
概括:
当然写了@synthesize,我们也可以自己再定义一次setter和getter方法,这时我们自定义的就会覆盖编译器帮我们生成的方法。如果既不写@synthesize又不写@dynamic是可以的,这种情况就默认要我们自己定义setter和getter方法。但是写上是一种良好的编程习惯,好处是:如果太多属性的时候,我们只要一看这些指示符(@synthesize或@dynamic),就知道每个属性是如何实现的。
如果我们写了@dynamic,但是没有自定义setter和getter方法,没有出现警告,可以编译,但是执行到setter或getter方法的时候会出错。