@property中的聲明列表已分類爲如下幾種:多線程
1, 聲明屬性的訪問方法:atom
2,聲明屬性寫操做權限:spa
3,聲明寫方法的實現:線程
-(void)setName:(NSString*)_name{ name = _name; }
retain
聲明在setter方法中,須要對設過來的值進行retain 加1操做。如:code
-(void)setName:(NSString*)_name{ //首先判斷是否與舊對象一致,若是不一致進行賦值。 //由於若是是一個對象的話,進行if內的代碼會形成一個極端的狀況:當此name的retain爲1時,使這次的set操做讓實例name提早釋放,而達不到賦值目的。 if ( name != _name){ [name release]; name = [_name retain]; } }
4,訪問方法的原子性:對象
[ _internal lock ]; // lock using an object-level lock id result = [ [ value retain ] autorelease ]; [ _internal unlock ]; return result;
但若是設置nonatomic時,屬性的訪問爲非原子性訪問。內存
總結: 須要全局訪問的變量儘可能聲明成屬性來進行賦值,聲明成成員變量沒法保持引用計數的一致性從而致使崩潰,在內部訪問數據時使用成員變量或屬性都是能夠的,在對屬性進行賦值時,會調用屬性的set方法,使引用計數加一從而保證內存的正確引用。get