簡體   English   中英

(iphone)uiimage,view,subviews memory management

[英](iphone) uiimage, view, subviews memory management

我需要在需要時發布uiimage / view / subviews,並有一些有關發布它們的正確做法的問題。

  1. [imageView removeFromSuperview]會發布imageView和imageView.image嗎?

  2. 查看=無; 會遞歸地釋放其子視圖/相關的uiimage? 如果不是,我應該實現一個遞歸函數來釋放視圖的子視圖嗎?

謝謝


編輯。

我查看了UIView的庫參考

addSubview-

此方法保留視圖並將其下一個響應者設置為接收器,這是其新的超級視圖。

removeFromSuperview -

如果接收者的超級視圖不是零,則超級視圖釋放接收者。 如果您計划重用視圖,請務必在調用此方法之前保留它,並在以后適當時再次釋放它。

仍然不確定[imageView release]是否釋放與其關聯的uiImage,我是否仍需要遞歸釋放子視圖。 即一個視圖被取消分配會自動保證它的子視圖發布?

當您執行[imageView removeFromSuperview] ,它不會釋放任何內容。 之后,您需要執行[imageView release] 即便如此,你仍然需要在imageView的dealloc中釋放你的內存。

[imageView removeFromSuperview]會發布imageView和imageView.image嗎?

removeSuperView在視圖上調用release ,但是你應該注意視圖保留計數。 僅僅因為你調用removeFromSuperview並不意味着它正在做你想要的。

查看=無; 會遞歸地釋放其子視圖/相關的uiimage? 如果不是,我應該實現一個遞歸函數來釋放視圖的子視圖嗎?

不,您可能想要這樣做(取決於您在創建過程中如何管理子視圖。如果超級視圖是他們唯一的參考,他們的保留計數可能為1,因此在調用removeFromSuperview后調用release會導致錯誤) :

for (UIView* subview in view){
    [subview removeFromSuperView];
    [subview release]
}
[view release];

編輯:要回答您的最后一個問題,不,在視圖上調用release不會自動在其所有子視圖上調用release。 您必須自己完成,無論是發布還是使用removeFromSuperview。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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