標籤:style blog color 使用 ar div cti sp log
@interface …@property (原子性,可寫性,記憶體管理) id name;@end
原子性: nonatomic, atomic 預設atomic可寫性: readwrite, readonly 預設readwrite記憶體管理: assign, retain, copy 預設assign 預設值:因為這幾個屬性都有預設值,所以可以任意指定某個屬性或者完全不指定:
@property id name; //等價於下一行:@property (atomic, readwrite, assign) id name;
可寫性:@property id name 會產生兩個setter,getter兩個提供者
-(void) setName:(id)name;-(id) name;
因此readonly說的是只產生getter函數不產生setter函數,預設值說的是兩者都產生 記憶體管理:assign 說的是介面任何時候都不會修改對象引用;retain 說的是調用setter時會release前一個對象再retain新對象;調用getter時會retain;copy 說的是調用setter時會copy新對象, release 前一個對象;調用getter時會retain; @property (assign) id name; 等價於
-(void) setName: (id) aName{ self.name = aName;} -(id) name{ return self.name;}
@property (retain) id name; 等價於
-(void) setName: (id) aName{ if ([self.name retainCount > 0]) { [self.name release]; } [aName retain]; self.name = aName;} -(id) name{ [self.name retain]; return self.name;}
@property (copy) id name; 等價於
-(void) setName: (id) aName{ if ([self.name retainCount > 0]) { [self.name release]; } self.name = [copy aName];} -(id) name{ [self.name retain]; return self.name;}
結論:除了assign屬性,使用時必須release對象,否則會記憶體流失!那這樣也太麻煩了,感謝ARC
Objective-C property屬性解析