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,说变量不再存在任何对象.为什么两次?还是我错过了什么?
调用[myView release]不会改变值myView,它会减少myView指向对象的保留计数(当对象的保留计数变为零时,它dealloc本身就是).在调用之后[myView release],myView仍然包含视图对象的地址,但如果它myView是唯一的所有者,那么该对象已经dealloc编辑并且内存不再有效(并且我现在被另一个对象或其他数据占用).通过设置myView为nil,确保您不会意外地使用以前属于的旧内存,myView现在您可以测试是否myView已初始化或丢弃.
请注意,您不需要设置myView到nil你的-dealloc方法,因为你的视图控制器在这一点反正要走了,但如果你放弃你的看法响应内存不足警告你想做到这一点.如果视图不可见,您也可以考虑丢弃整个视图控制器.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |