干柴

黑马程序员 @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方法,优先调用自己实现的方法



评论

热度(1)