[UIView removeFromSuperview]是否也会递归删除其子视图?

时间:2011-11-25 14:53:58

标签: objective-c ios uiview

我有一个我需要完全删除的视图层次结构。是否可以在顶级父视图上调用removeFromSuperview或者我是否需要递归访问每个子节点并单独删除它?

修改:为了澄清一下,我了解删除父级会将子视图从视图中移除,但这是否也会适当地减少其引用次数?

4 个答案:

答案 0 :(得分:4)

所有子视图都属于视图;所以,当你从它的超级视图中删除一个视图时 - 它会被所有它的子视图删除。

答案 1 :(得分:2)

是。您可以将视图视为树结构。因此,如果您将视图从超级视图中删除,则将删除整个结构。

例如:UIButton实际上是一个包含显示按钮标题的UILabel的视图。所以你可以这样做[myUIButton removeFromSuperview];,这将删除按钮及其自己的视图层次结构(包括按钮包含UILabel)。

备注:如果您只想隐藏/并显示视图,您还可以将其hidden属性设置为YESNO,而不是删除从视图层次结构查看。像这样,很容易再次显示视图。

答案 2 :(得分:2)

不,删除视图不会对其子视图执行任何操作(但当然它们将不再被绘制,因为它们不再位于视图层次结构中)。

当然,如果删除一个视图并且没有其它强引用,它可能会在将来的某个时候被释放(尽管您不应该关心这个或假设没有其他引用)。 如果它被取消分配时,它将删除它的子视图并释放它们。

答案 3 :(得分:0)

您可以在顶级父视图中执行此操作。