我需要在需要时发布uiimage / view / subviews,并对发布它们的正确练习提出一些问题。
[imageView removeFromSuperview]会发布imageView和imageView.image吗?
view = nil;将递归发布其子视图/和相关的uiimages?如果没有,我应该实现递归函数来释放视图的子视图吗?
谢谢
编辑。
我查看了UIView的图书馆参考资料
addSubview -
此方法保留视图并设置其视图 接下来对接收器的响应者 是它的新超级视图。
removeFromSuperview -
如果接收者的超级视图不是 没有,超级视图发布了 接收器。如果您打算重用视图, 一定要在打电话之前保留它 这个方法稍后再发布 酌情。
仍然不确定[imageView发布]是否会释放与之关联的uiImage, 我还需要递归发布子视图吗?即一个被取消分配的视图会自动保证它的子视图会被释放吗?
答案 0 :(得分:1)
执行[imageView removeFromSuperview]
时,它不会发布任何内容。之后你需要[imageView release]
。即便如此,你仍然需要在imageView
的dealloc中释放你的记忆。
答案 1 :(得分:1)
[imageView removeFromSuperview]会 发布imageView和 imageView.image?
removeSuperView calls release on the view,但你应该注意保留计数的意见。仅仅因为你调用removeFromSuperview并不意味着它正在做你想要的。
view = nil;会释放它 子视图/和相关的uiimages 递归?如果没有,我应该 实现递归函数 发布视图的子视图?
不,您可能想这样做(取决于您在创建过程中管理子视图的方式。如果superview是他们唯一的参考,他们可能会有一个保留计数为1,因此在调用removeFromSuperview后调用release会导致错误):
for (UIView* subview in view){
[subview removeFromSuperView];
[subview release]
}
[view release];
编辑:要回答你的最后一个问题,不,在视图上调用release不会自动调用其所有子视图的发布。您必须自己完成,无论是发布还是使用removeFromSuperview。