[英](iphone) uiimage, view, subviews memory management
我需要在需要時發布uiimage / view / subviews,並有一些有關發布它們的正確做法的問題。
[imageView removeFromSuperview]會發布imageView和imageView.image嗎?
查看=無; 會遞歸地釋放其子視圖/相關的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.