繁体   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