黑马程序员 @property的使用
- 在没有使用@property之前,定义属性的set和get方法是
//声明
@interface Student : NSObject
{
NSString * _name;
}
@property(nonatomic,retain)NSString *name;
- (void)setName:(NSString *)name;
- (NSString *)name;
@end
//实现
@implementation Student
- (void)setName:(NSString *)name
{
if (_name!=name) {
[_name release];
_name=[name retain];
}
}
- (NSString *)name
{
return _name;
}
@end
- 使用@property 可以为一个属性自动生成set和get方法
//.h文件
@interface Student : NSObject
{
// NSString * _name;
}
//只需要写上这句代码,就可以不用在去自己声明和实现set和get方法了
@property(nonatomic,retain)NSString *name;
//- (void)setName:(NSString *)name;
//- (NSString *)name;
@end
- @ property关键字说明
@property(nonatomic,retain,readwrite)NSString *name;
- 原子性
- atomic :多线程环境下,线程保护,默认
- nonatomic :不存在线程包含
- 赋值
- assign :直接赋值,默认
- retain :持有对象,引用计数+1
- copy :拷贝对象
- 读写性
- readwrite :生成getter、setter方法,默认
- readonly :只生成getter方法
- assign、retain、copy对应的实现代码
//assign
- (void)setName:(NSString *)name
{
_name=name;
}
//retain
- (void)setName:(NSString *)name
{
if(_name!=name)
{
[_name release];
_name=[name retain];
}
}
//assign
- (void)setName:(NSString *)name
{
if(_name!=name)
{
[_name release];
_name=[name copy];
}
}
- 如果有需要,我们可以重新实现set和get方法,优先调用自己实现的方法
评论