我有一个我需要完全删除的视图层次结构。是否可以在顶级父视图上调用removeFromSuperview
或者我是否需要递归访问每个子节点并单独删除它?
修改:为了澄清一下,我了解删除父级会将子视图从视图中移除,但这是否也会适当地减少其引用次数?
答案 0 :(得分:4)
所有子视图都属于视图;所以,当你从它的超级视图中删除一个视图时 - 它会被所有它的子视图删除。
答案 1 :(得分:2)
是。您可以将视图视为树结构。因此,如果您将视图从超级视图中删除,则将删除整个结构。
例如:UIButton
实际上是一个包含显示按钮标题的UILabel
的视图。所以你可以这样做[myUIButton removeFromSuperview];
,这将删除按钮及其自己的视图层次结构(包括按钮包含UILabel)。
备注:如果您只想隐藏/并显示视图,您还可以将其hidden
属性设置为YES
或NO
,而不是删除从视图层次结构查看。像这样,很容易再次显示视图。
答案 2 :(得分:2)
不,删除视图不会对其子视图执行任何操作(但当然它们将不再被绘制,因为它们不再位于视图层次结构中)。
当然,如果删除一个视图并且没有其它强引用,它可能会在将来的某个时候被释放(尽管您不应该关心这个或假设没有其他引用)。 当和如果它被取消分配时,它将删除它的子视图并释放它们。
答案 3 :(得分:0)
您可以在顶级父视图中执行此操作。