Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我应该在何时释放dealloc中的对象?_Iphone_Objective C_Memory Management - Fatal编程技术网

Iphone 我应该在何时释放dealloc中的对象?

Iphone 我应该在何时释放dealloc中的对象?,iphone,objective-c,memory-management,Iphone,Objective C,Memory Management,有时在iPhone上用Objective C编写代码时,我想知道我是否应该在dealloc中发布一个对象,或者如果该视图是应用程序中一个单独的很少使用的部分,那么在ViewWill中发布有时会更好 谢谢。首先,您可能希望在视图中释放内容,并在它们离开屏幕后消失:,而不是视图将消失:在任何情况下,您可能都应该在视图中释放它,并在视图中消失:和解除锁定 在viewdidegase:中,为了节省内存,您应该在屏幕外释放不需要的任何东西。在dealloc中,您应该释放对象可能保留的所有内容。无论您是否可

有时在iPhone上用Objective C编写代码时,我想知道我是否应该在dealloc中发布一个对象,或者如果该视图是应用程序中一个单独的很少使用的部分,那么在ViewWill中发布有时会更好


谢谢。

首先,您可能希望在
视图中释放内容,并在它们离开屏幕后消失:
,而不是
视图将消失:
在任何情况下,您可能都应该在
视图中释放它,并在
视图中消失:
解除锁定

viewdidegase:
中,为了节省内存,您应该在屏幕外释放不需要的任何东西。在
dealloc
中,您应该释放对象可能保留的所有内容。无论您是否可能在
viewdidegale:
中发布它,您都希望这样做,以防您的代码通过一个奇怪的路径输入,而该路径没有调用
viewdidegale:
。将来,当您在不同的环境中重用视图控制器时,或者当Apple更改了您容纳VC的集合视图控制器时,可能会发生这种情况


只要您在释放IVAR后适当地将其置零(如果您使用的是属性,则应自动执行此操作)那么过度发布也不是问题,因为如果您在两个地方都发布,那么第二个版本最终会将发布消息发送到nil。

一些资源也适合在那里发布,这实际上取决于您正在做什么。关键的一点是,无论您是否可以在VCs运行时释放对象以响应内存压力或事件,您都应该确保VC可能保留的任何对象都在dealloc中释放。回答得好!谢谢