赋值
assign:直接赋值、默认
@interface Car : NSObject { NSString *_name; } @property (assign,nonatomic) NSString *name; - (void) setName:(NSString *)name { _name = name; }
retain :保留对象
@interface Car : NSObject { NSString *_name; } @property (retain,nonatomic) NSString *name; - (void) setName:(NSString *)name { if (_name != name) { [_name release]; _name = [name retain]; } }
copy: 拷贝对象
@interface Car : NSObject { NSString *_name; } @property (copy,nonatomic) NSString *name; - (void) setName:(NSString *)name { if (_name != name) { [_name release]; _name = [name copy]; } }
三者的区别
assign:直接赋值,只是一个别名而已
retain:保留的这个对象,两个对象指向了同一个位置
copy:开辟了新的内存空间,分别指向了不同的内存位置,引用技术分别为l,
与之前的对象完全脱离关系。这里我们尤其需要注意,某些时候copy的作用相当于retain。
读写性
readwrite:可读可写、默认
readonly: 只读
原子性
atomic:多线程环境下,存在线程保护
noatomic: 多线程环境下,不存在线程保护