-(void)viewDidUnload
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:LASTUPDATEDLOCATION object:nil];
[self setHeaderViewofWholeTable:nil];
[self setFooterViewofWholeTable:nil];
[self setHeaderActivityIndicator:nil];
[self setFooterActivityIndicator:nil];
[self setLastUpdated:nil];
[self setLblPullDowntoRefresh:nil];
[self setRefreshArrow:nil];
[self setContainerForFormerHeader:nil];
[self setFooterContainer:nil];
[super viewDidUnload];
}
我认为viewDidLoad被称为视图本身是零。当我们将视图设置为nil时,这些东西不会自动变为零吗?
我误解了什么?
答案 0 :(得分:3)
在ARC之前,您需要手动释放已分配的对象。将标记为retain
的属性设置为nil
会释放。使用自动引用计数(ARC)功能时不再需要此功能,该功能默认在最新版本的Xcode附带的编译器中启用。
答案 1 :(得分:3)
好消息。从iOS 6开始,viewDidUnload
已被弃用。在iOS 5及更早版本中,当内存不足时,您的视图可能已被卸载(并确保没有内存泄漏,您在此方法中释放了IBOutlets)。但是在iOS 6中不再调用它,因此不再需要。
现在,如果内存出现问题,您的视图控制器可以覆盖:
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
答案 2 :(得分:2)
其他一些答案涵盖了部分内容,但还有更多内容。视图控制器将调用其viewDidLoad
方法。通常,这会导致保留IBOutlet,并且可能会分配和保留许多其他视图和对象。如果一切顺利,最终会取消分配视图控制器,并且需要释放所有这些保留的对象。
这是一条简单而快乐的道路。在内存不足的情况下,在iOS 5及更早版本中,可能会卸载视图控制器的视图。 viewDidUnload
方法可以清除作为viewDidLoad
进程一部分保留的所有其他对象。这是主要原因 - 在某些时候,可能会再次调用viewDidLoad
来重新显示视图控制器的视图。
大多数人都会编写他们的viewDidLoad
方法,因为它只会被调用一次。如果viewDidUnload
方法正确清除对象,则可以。如果没有,下一次调用viewDidLoad
将导致一堆内存泄漏。
viewDidUnload
中正确清理内容,ARC几乎消除了内存泄漏的问题。但viewDidUnload
仍然有助于在需要时清理内存。
如前所述,从iOS 6开始,视图控制器的视图从未在低内存条件下卸载,而viewDidUnload
(和viewWillUnload
)方法已被弃用。
如果您的应用仍然支持iOS 5以及iOS 6,则仍需要正确使用viewDidUnload
。但如果您想在需要时释放内存,请使用didReceiveMemoryWarning
。
答案 3 :(得分:1)
我们设置了很多东西,以便尽可能多地释放内存并减少处理器压力并延长电池续航时间,并非所有对象都会自动从队列中删除。