2011-02-04 104 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