2011-05-01 155 views
1

我在我的Alloc的方法和初始化一个如何删除子视图(或视图的所有子视图)

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; 

足以删除视图和所有它的子视图(即,按钮)的?

还是会更好删除的上海华盈为好,完全从头开始:

self.tabsClippedView = nil; 
+0

我在另一个stackoverflow问题中找到了这个答案:http://stackoverflow.com/a/2156046/374873 – apb 2013-01-05 14:52:29

回答

13

由于您的UIView会被自动释放,你只需要从上海华删除它。对此,有removeFromSuperview方法。

所以,你只需要拨打[self.tabsView removeFromSuperview]。只要您的财产声明设置为retain这就是您所需要的。

+0

谢谢...那么self.tabsView = nil;命令 - 会是错误的还是与removeFromSuperview不同?谢谢你的帮助! – 2011-05-01 20:56:02

+1

'self.tabsView = nil'不会将其从superView中删除。 – cweinberger 2011-05-01 21:05:52

+1

他/她说了什么 - 你不需要将它设置为零,因为只要你正确设置了你的@属性声明,当你重新分配属性时,这将被照顾。 – lxt 2011-05-01 21:30:13

4

另一种解决方案:不要删除你的UIButtons,而是重新使用它们。不知道你的确切用例,但你可以将tags分配给你的UIButtons,并用[UIView viewWithTag:]找到它们。

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

+0

谢谢,但我需要完全删除一些按钮,所以我猜这是行不通的。不过谢谢你的想法。 – 2011-05-01 20:56:36