我想从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];
}
答案 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
错误:
所以我最终得到self.tabViewController.viewControllers = nil;
并且它的工作正常。