[英]How to fix view retain cycle causing subview's dealloc to not be called?
我有一個視圖控制器,它實例化了一堆UIButton子類,並將它們添加到其self.view以及可變數組中。 這些子類又具有保留屬性,該屬性指向另一個視圖。 在大多數情況下,view屬性指向UIButton子類的超級視圖(添加了它們的視圖控制器的self.view)。 但並非總是如此,也未必一定如此,這就是為什么我使用此屬性而不是繼承的superview的原因。
我遇到的問題是,當視圖控制器的dealloc執行以下操作時:
- (void)dealloc
{
[UIBUttonSubClassesArray release];
[super dealloc];
}
UIButton子類的dealloc沒有被調用。 因此,不會調用這些子類中的view屬性的其他發行版,即使釋放了視圖控制器,我也會為每個UIButton子類泄漏一次視圖控制器的視圖。
但是,如果改為給子類的view屬性賦值,這樣我就不必在其dealloc中調用release,那么它們的dealloc就會被調用,即使現在沒有代碼引用該視圖,應用也會崩潰。
有任何想法嗎?
如果您的viewcontroller不在保留周期中,則可以通過將按鈕中的額外保留屬性設置為nil來中斷其dealloc(以及其viewDidUnload)中的周期。
盡管始終最好不要一開始就創建保留循環,但是我對您的問題沒有足夠的線索來了解如何避免這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.