至於這個帖子: iPhone - dealloc - Release vs. niliOS內存管理跟進。 dealloc vs nil?
1) [foo release];
2) self.bar = nil;
的解釋如下:
正在釋放的對象,通過實例變量酒吧訪問它。實例變量將成爲懸掛指針。這是dealloc中的首選方法。
是一個分配零到自我的屬性欄,將在實踐中發佈的任何財產,目前保留。如果你有一個屬性的自定義setter,那麼應該這樣做,它應該清除不僅僅是支持屬性的實例變量。
有人請澄清#1的解釋嗎?通過實例變量訪問?
例如,我在我的對象頭設置一個私人VAR像這樣:
SomeObject *oPointer;
我不使用這個指針在頭文件屬性setter和它不得到合成時,實例化目的。
在我的代碼中,在給定的條件下,我稍後必須分配這個指針給它的對象。
obj = [[SomeObject alloc] initWith....];
所以這通過實例變量OBJ現在訪問。我有一個UIButton被配置爲重置這個對象,它附加的方法釋放它。我通過這樣做:
[obj release];
obj = nil;
畢竟是解釋的問題是,爲什麼我還有宣佈與obj =零? [obj發佈]調用似乎也殺死了指針。我在想,[OBJ發行]會取消分配它指向的內存,並且還設置OBJ爲零所有在一杆,但現在看來,這也殺死指針,因爲我的應用程序崩潰時,它試圖引用OBJ後[obj release];
這個問題有意義嗎?是簡單的解釋[obj發佈]確實全部清理,包括殺死指針,我需要知道這一點?
如果我爲SomeObject指針設置retain屬性,指針在發佈後仍然保留?
提前致謝!