从UITabBarController中删除所有项目

时间:2011-08-31 07:08:35

标签: objective-c ios memory-management uitabbarcontroller

我想从MainWindow中的UITabBarController中删除所有项目。我可以这样做:

self.tabViewController.viewControllers = [NSArray array];
self.tabViewController.customizableViewControllers = [NSArray array];

但那里的旧控制器怎么样?这是更正确的方法吗?

- (void)cleanCurrentTabbar {
    for (id ctrl in self.tabViewController.customizableViewControllers) {
        [ctrl release];
    }
    for (id ctrl in self.tabViewController.viewControllers) {
        [ctrl release];
    }
    self.tabViewController.viewControllers = [NSArray array];
    self.tabViewController.customizableViewControllers = [NSArray array];
}

3 个答案:

答案 0 :(得分:1)

在内存管理方面,你的第二个选择是更正确的概念,因为它会在将所有已分配的资源设为零之前释放它。

但是,不是给它一个空数组,它本身就是一个像[NSArray数组]这样的自动释放对象,你可以指定nil

- (void)cleanCurrentTabbar {
    for (id ctrl in self.tabViewController.customizableViewControllers) {
        [ctrl release];
    }
    for (id ctrl in self.tabViewController.viewControllers) {
        [ctrl release];
    }
    self.tabViewController.viewControllers = nil;
    self.tabViewController.customizableViewControllers = nil;
}

正如詹姆斯韦伯斯特在评论中所说:

“您可能需要或可能不需要发布,具体取决于属性类型viewControllers和customizableViewControllers是”

希望这会对你有所帮助。

答案 1 :(得分:0)

在记忆方面,这是更清洁的。您应该在完成对象后释放对象,包括重新分配之前的对象。

但是,我注意到你正在使用self.tabViewController.viewControllers。该财产是否已分配或保留?如果保留,则发布将在内部完成。

答案 2 :(得分:0)

正如@Parth Bhatt所说,发布viewControllers项似乎是个好主意。也许。但在我的情况下,它会导致奇怪的EXC_BAD_ACCESS错误: enter image description here 所以我最终得到self.tabViewController.viewControllers = nil;并且它的工作正常。