当涉及低内存警告时,我在多视图应用程序中需要考虑什么?

Tha*_*nks 1 iphone memory-management objective-c uikit

我正在阅读的某个地方,当我因为内存警告不足而暂时放弃一个视图时会遇到内存问题(如果用户想要看到它就再次加载它),如果ViewController类没有在每个事情上做这样的事情这种观点的出路:

-(void)dealloc {
    [myView release], myView = nil;
    [myLabel release], myLabel = nil;
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

我在这里很困惑,因为实际上我认为[myView release]也会做出nil-thing,说变量不再存在任何对象.为什么两次?还是我错过了什么?

Don*_*hey 5

调用[myView release]不会改变值myView,它会减少myView指向对象的保留计数(当对象的保留计数变为零时,它dealloc本身就是).在调用之后[myView release],myView仍然包含视图对象的地址,但如果它myView是唯一的所有者,那么该对象已经dealloc编辑并且内存不再有效(并且我现在被另一个对象或其他数据占用).通过设置myViewnil,确保您不会意外地使用以前属于的旧内存,myView现在您可以测试是否myView已初始化或丢弃.

请注意,您不需要设置myViewnil你的-dealloc方法,因为你的视图控制器在这一点反正要走了,但如果你放弃你的看法响应内存不足警告你想做到这一点.如果视图不可见,您也可以考虑丢弃整个视图控制器.