[英](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.