賦值多線程
assign:直接賦值、默認atom
@interface Car : NSObject { NSString *_name; } @property (assign,nonatomic) NSString *name; - (void) setName:(NSString *)name { _name = name; }
retain :保留對象spa
@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]; } }
三者的區別code
assign:直接賦值,只是一個別名而已
retain:保留的這個對象,兩個對象指向了同一個位置
copy:開闢了新的內存空間,分別指向了不一樣的內存位置,引用技術分別爲l,
與以前的對象徹底脫離關係。這裏咱們尤爲須要注意,某些時候copy的做用至關於retain。對象
讀寫性
readwrite:可讀可寫、默認blog
readonly: 只讀
原子性
atomic:多線程環境下,存在線程保護內存
noatomic: 多線程環境下,不存在線程保護it