我有一个方法,我分配并初始化
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 :(得分:14)
由于你的UIView是自动释放的,你只需要从superview中删除它。其中有removeFromSuperview
方法。
所以,你只想打电话给[self.tabsView removeFromSuperview]
。只要您的财产声明设置为retain
,那就是您所需要的一切。
答案 1 :(得分: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
。