Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何删除子视图(或视图的所有子视图)_Iphone_Objective C_Cocoa Touch_Uiview - Fatal编程技术网

Iphone 如何删除子视图(或视图的所有子视图)

Iphone 如何删除子视图(或视图的所有子视图),iphone,objective-c,cocoa-touch,uiview,Iphone,Objective C,Cocoa Touch,Uiview,我有一个方法,其中我alloc和init UIView (`tabsClippedView = [[[UIView alloc] initWithFrame:tabsClippedFrame] autorelease];`). 此视图添加了另一个视图 (`tabsView = [[[UIView alloc] initWithFrame:tabsFrame] autorelease];`). 然后我启动几个按钮 (e.g. `UIButton* btn = [[[UIButton

我有一个方法,其中我alloc和init

UIView (`tabsClippedView = [[[UIView alloc] initWithFrame:tabsClippedFrame] autorelease];`).
此视图添加了另一个视图

(`tabsView = [[[UIView alloc] initWithFrame:tabsFrame] autorelease];`).     
然后我启动几个按钮

(e.g. `UIButton* btn = [[[UIButton alloc] initWithFrame:frame] autorelease];`)
并将它们添加到视图的子视图中

现在,我需要不时地删除所有按钮并重新分配它们。删除整个视图或仅删除添加了按钮的子视图的最佳方式是

我需要怎么做(没有内存泄漏等)会是一个简单的

self.tabsView = nil;
是否足以删除视图及其所有子视图(即按钮)?

或者最好也删除superview,完全从头开始:

self.tabsClippedView = nil;

由于UIView是自动删除的,因此只需将其从superview中删除即可。其中有
removeFromSuperview
方法


因此,您只需要调用
[self.tabsView removeFromSuperview]
。只要您的属性声明设置为
retain
,您就只需要这样做。

由于您的UIView是自动删除的,您只需要将其从superview中删除即可。其中有
removeFromSuperview
方法


因此,您只需要调用
[self.tabsView removeFromSuperview]
。只要您的属性声明设置为
retain
,您就需要这样做。

另一个解决方案:不要删除
ui按钮,而是重复使用它们。不知道您的确切用例,但您可以将
标记指定给
ui按钮
,并使用
[ui查看带标记的视图:
查找它们

UIButton* btn = [[UIButton alloc] initWithFrame:frame];
btn.tag = 42; // some unique identifier for the button.. dont use 0 (zero)
[tabsView addSubview:btn];
[btn release];
后来

UIButton* btn = (UIButton*)[tabsView viewWithTag:42];
if(btn && [btn isKindOfClass:[UIButton class]]) {
    // do some stuff with btn
}

此外:在我看来,只有当你没有其他选择时,你才应该使用
autorelease
。在这里,将btn添加为子视图后,您可以轻松地释放它。

另一个解决方案:不要删除
ui按钮,而是重新使用它们。不知道您的确切用例,但您可以将
标记指定给
ui按钮
,并使用
[ui查看带标记的视图:
查找它们

UIButton* btn = [[UIButton alloc] initWithFrame:frame];
btn.tag = 42; // some unique identifier for the button.. dont use 0 (zero)
[tabsView addSubview:btn];
[btn release];
后来

UIButton* btn = (UIButton*)[tabsView viewWithTag:42];
if(btn && [btn isKindOfClass:[UIButton class]]) {
    // do some stuff with btn
}

此外:在我看来,只有当你没有其他选择时,你才应该使用
autorelease
。在这里,您可以轻松地在添加为子视图后发布
btn

谢谢。。。那么self呢。tabsView=nil;命令--这是错误的还是与removeFromSuperview不同?谢谢你的帮助
self.tabsView=nil
不会将其从superView中删除。他/她说的-您不需要将其设置为nil,因为只要您正确设置了@property声明,在重新分配属性时就会处理好。谢谢。。。那么self呢。tabsView=nil;命令--这是错误的还是与removeFromSuperview不同?谢谢你的帮助
self.tabsView=nil
不会将其从superView中删除。他/她说的-您不需要将其设置为nil,因为只要您正确设置了@property声明,在重新分配属性时就会考虑到这一点。谢谢,但我需要完全删除一些按钮,所以我想这不会起作用。不过,谢谢你的想法。谢谢,但是我需要完全删除一些按钮,所以我想这不会起作用。不过,谢谢你的想法。我在另一个stackoverflow问题中找到了答案:我在另一个stackoverflow问题中找到了答案: