2011-07-01 104 views
2

我知道內存管理規則,如果遵循這些規則,我不需要問什麼。但是,我想知道是否有辦法知道一個實例是否已經釋放而沒有拋出異常。 我的應用程序使用一個對象,我的應用程序上的任何視圖都可以成爲它的代表。有時候,我得到這個衆所周知的錯誤。我可以通過將委託設置爲當前委託所有者的dealloc方法來避免這種情況。 總結...我有什麼方法可以知道一個對象是否被釋放了嗎?查詢實例是否已被釋放

謝謝。

回答

3

我可以告訴指針現在是否指向垃圾?

不,不是真的。一旦一個對象被釋放,它的內存可以在任何時間被重用。有時它會指向垃圾(導致崩潰),有時它會指向一個不同的Obj-C對象,有時內存不會被重用。

主要的例外是,如果你設置環境變量NSZombieEnabled=YES(在「編輯方案」的某處在Xcode 4),由對象使用的內存將永遠不會被釋放(除非您也將NSDeallocateZombies=YES,左右);相反,向殭屍發送消息會導致異常。它對於調試很有用,主要是因爲它告訴你已經取消分配的實例的類名。

+0

好的,我明白了。但是我仍然想知道爲什麼我沒有嘗試抓東西的東西,或者任何告訴我的東西「嘿!你現在沒有什麼東西可以用在這個指針上,你想自己處理這個錯誤嗎?」而不僅僅是一場崩潰。你知道,有時候不願意把代表指向無處不在。只是一個想法。感謝您的回答。 – Jorge

+0

因爲垃圾指針是垃圾指針。 –

1

一旦底層對象被釋放,我通常會嘗試設置指向nil的指針。在這種情況下,您可以簡單地檢查指針是否爲nil以查看對象是否已被釋放。這並非總是可能,但往往是。

0

您的問題的答案是明確的「不」。由於無效的指針訪問,您不能要求指針是否有效,不會冒險導致崩潰。好消息是,將委託對象設置爲零是正確的,所以你現在做的很好。

相關問題