在哪里发布对象?dealloc或ViewDidUNload

Kri*_*nan 1 memory iphone memory-management

当我们需要释放一个对象,在哪里做,可以在dealloc方法中,也可以在ViewDidUnload中为viewController发布?哪个更好?

我认为viewDidUnload会做得更好,因为一旦卸载了视图控制器,对象就会被释放.而在dealloc案例中,来自文档

当应用程序终止时,可能不会向对象发送dealloc消息.因为进程的内存在退出时自动清除,所以仅仅允许操作系统清理资源比调用所有内存管理方法更有效.

在应用程序退出时,可能不会向对象发送dealloc消息.

所以我发现如果对象早先发布会比推迟发布更好,从而减少应用程序占用的内存空间.

如果我的理解有误,请纠正我.

谢谢和问候,克里希南

Ole*_*ann 6

是的,你的理解是错误的.

首先,当应用程序退出时会发生什么并不重要,因为操作系统将释放应用程序分配的所有内存.在应用程序终止时不调用dealloc只是Apple提高速度的方法.

其次,调用时不是视图控制器,viewDidUnload而是仅调用其视图.视图控制器保持活动状态,直到它被解除分配.

viewDidUnload,您必须释放那些属于视图的对象以及可以和将要重新创建的所有对象viewDidLoad(因为viewDidLoad当视图控制器需要重新创建其视图时将再次调用).这包括您的所有商店.您还必须将这些变量设置nil为避免过度释放它们.

因为在dealloc,您应该释放视图控制器保留的所有对象,包括您包含的对象viewDidUnload.

看看Apple的任何示例代码,看看Apple如何做到这一点.