Iphone 如何删除子视图(或视图的所有子视图)
我有一个方法,其中我alloc和initIphone 如何删除子视图(或视图的所有子视图),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
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问题中找到了答案: