2011-02-04 102 views
0

我需要釋放uiimage/view/subviews,並且有一些關於正確釋放它們的問題。(iphone)uiimage,view,subviews內存管理

  1. [imageView removeFromSuperview]會釋放imageView和imageView.image?

  2. view = nil;遞歸地發佈它的子視圖/和相關的uiimages?如果不是,我應該實現一個遞歸函數來釋放視圖的子視圖嗎?

謝謝


編輯。

我看着UIView的圖書館參考

addSubview -

這種方法保留看法,並將其 旁邊響應到接收器,這 是其新的上海華。

removeFromSuperview -

如果接收方的上海華不 零時,上海華盈釋放 接收器。如果您打算重新使用視圖,則在調用 此方法之前一定要保留該視圖,並在適當時候再次放行 。

還不能確定[imageView發佈]發佈與它相關聯的uiImage, ,我仍然需要遞歸發佈子視圖。即一個視圖越來越dealloced會自動保證它的子視圖發佈?

回答

1

[ImageView的removeFromSuperview]將 釋放的ImageView和 imageView.image?

removeSuperView calls release on the view,但您應該留意保留計數的意見。僅僅因爲你叫removeFromSuperview並不意味着它正在做你想做的事。

view = nil;會遞歸發佈其 子視圖/和相關聯的圖像 ?如果不是,我是否應該 實現遞歸功能 發佈視圖的子視圖?

不,您可能想要做(取決於您在創建過程中如何管理子視圖。如果上海華是他們唯一的參考,他們可能有1保留計數,因此呼籲呼籲removeFromSuperview會導致錯誤)後釋放:

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

編輯:要回答你的最後一個問題,沒有,就調用release視圖不會自動調用所有子視圖的發佈。無論是使用release還是使用removeFromSuperview,您都必須自己做。

1

當你做[imageView removeFromSuperview]時,它不會釋放任何東西。之後你需要如此[imageView release]。即使如此,你仍然需要在imageView的dealloc中釋放該視圖的內存。

+0

我以爲[parentView addSubview:childView]保留了childView和[parent removeFromSuperview:childView]釋放了childView。兩種假設都是錯誤的? – eugene 2011-02-04 05:09:44

+0

你可能是對的。我提到的方式是我一直認爲這是。讓我們看看別人是否說我錯了。 :) – 2011-02-04 05:14:10