,如果我創建「分配」屬性在dealloc方法與「分配」創建時,它設置一個屬性,以零
@property (nonatomic, assign) NSString* myData;
- (void)dealloc {
self.myData = nil;
}
,如果我創建「分配」屬性在dealloc方法與「分配」創建時,它設置一個屬性,以零
@property (nonatomic, assign) NSString* myData;
- (void)dealloc {
self.myData = nil;
}
然後調用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
}
的干將之間是沒有區別的。兩者都只是非原子。
這樣做沒有任何問題。
這樣做通常沒有任何好處。它將不起作用,除非dealloc中的一些代碼在依賴於myData的值之後運行。
當您將聲明的屬性設置爲retain並將其定義爲nil時,它會導致發送到以前的屬性值。但是,當它被定義爲分配時,這不會發生。它基本上只是設置實例變量,這在dealloc中通常無關緊要,因爲沒有其他任何內容會讀取實例變量的值。
它只是設置myData爲零。 –
哇,爲什麼4倒票? – morningstar