2012-02-08 32 views
1

IOS的​​dealloc我可能有術語在我的問題,但這裏是我最好的嘗試:與autoreleasepool

ARC我的iOS應用程序啓用了autoreleasepool。因此我不會發佈內存在我選擇,但它似乎是在GC皮卡寧。

我遇到了麻煩dealloc爲已經從它刪除特定UIView運行的super視圖。這是正常的嗎?

回答

1

所有的ARC都確保在適當的時候發送保留和發佈的消息(當你開始和停止引用一個對象時)。沒有GC - deallocs與之前完全一樣 - 當保留計數變爲0時,它們完成。

autorelease池用於當您調用autorelease而不是release時。這意味着通過將釋放呼叫放入由自動釋放池管理的隊列中來延遲釋放呼叫 - 當池被耗盡時,隊列中的每個對象都釋放調用它的釋放。

所以,如果你是根據ARC -

  1. 不叫保留,釋放或自動釋放自己 - 如果你想試試

  2. 使用你生成錯誤(強)屬性,以保持你需要保持的參考

  3. 如果你最終得到一個循環引用 - 一個強指針指向一個對象,強點回來 - 然後這一切都崩潰了 - ARC贏了' t發佈任何東西。您可能需要將其中一個指針設置爲零,或使其中一個指針變弱。

在你認爲dealloc應該被調用並且檢查對象retainCount的地方設置斷點。使用Leaks工具找出可能發生的事情。