2011-10-13 27 views

回答

3

然後調用setter時剛剛將屬性設置爲無屬性會發生什麼指向nil的指針,沒有其他事情發生。

編輯:區別(非原子,分配)和(非原子,保留)

assign - 屬性將只設置指針和retain - 屬性也將呼籲舊發佈,並保留在新對象。

合成(nonatomic, assign) -setter看起來就像這樣:

-(void) setMyData:(NSString*)value 
{ 
    myData = value; //just assigning the pointer 
} 

而合成(nonatomic, retain) -setter看起來就像這樣:

-(void) setMyData:(NSString*)value 
{ 
    [value retain]; // retain new object 
    [myData release]; // release old object. if myData is nil: nothing happens 
    myData = value; // assigning the pointer 
} 

的干將之間是沒有區別的。兩者都只是非原子。

+0

正常情況下,我們會@property(nonatomic,retain)NSString * myData;那麼這裏有什麼區別。 – Abhinav

+0

看看我編輯的答案 – thomas

0

這樣做沒有任何問題。

這樣做通常沒有任何好處。它將不起作用,除非dealloc中的一些代碼在依賴於myData的值之後運行。

當您將聲明的屬性設置爲retain並將其定義爲nil時,它會導致發送到以前的屬性值。但是,當它被定義爲分配時,這不會發生。它基本上只是設置實例變量,這在dealloc中通常無關緊要,因爲沒有其他任何內容會讀取實例變量的值。

相關問題