簡體   English   中英

如何解決視圖保留周期導致子視圖的dealloc不被調用的問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM