我看到这个问题已被反过来问了,我的问题是如果我发布了一个有超级视图的UIView,调用[myView release]会不会通过调用[removeFromSuperview]进行清理?我猜它确实如此,因为我没有看到任何泄漏,但我想确定。
答案 0 :(得分:1)
除非您在用户仍在查看时需要从其超级视图中删除该视图,否则无需调用removeFromSuperview。换句话说,除非您在滚动视图中排队大量图像或具有某种性质,否则将其用作演示工具而不是内存管理工具。除此之外,超级视图在发布时管理他们的子视图。
此外,如果您保留在视图控制器中并删除已保留的视图,则不会释放该视图。在静态视图控制器中释放视图也不会将其从超级视图中删除(除非您已将其子类化,否则将其删除)。
答案 1 :(得分:1)
不,它没有。
您可能没有泄漏,因为泄漏意味着未引用的指针,并且视图仍将由其父级引用。 (当父母被释放时,它将摆脱孩子。)
答案 2 :(得分:1)
在UIView类参考文档中
addSubview:
Adds a view to the end of the receiver’s list of subviews.
(void)addSubview:(UIView *)view Parameters
view
The view to be added. **This view is retained by the receiver**. After being added, this view appears on top of any other subviews.
释放UIView仅影响引用计数。如果引用计数为零,则将其取消分配。否则,它被认为是由他人持有,直到他们全部释放它。