在低内存条件处理之后,在'init'方法期间初始化数据

时间:2009-09-08 18:47:44

标签: iphone memory-management

当一个应用程序从低内存条件回来时(即内存不足,事情被释放,应用程序现在恢复正常使用场景),通过

  

- (ID)初始化

方法

当您收到内存不足警告时,您将保留所有数据并调用viewDidUnload方法。最终,视图可能会重新加载,但类的'init'方法不会再次调用。

那么你会坚持使用'init'方法初始化的所有状态信息,然后在使用应用程序的过程中进行操作吗?

我更具体地问的是课程和课程。当从低内存条件返回时,'init'方法期间创建的其他相关数据将被恢复。

1 个答案:

答案 0 :(得分:1)

如果对象被解除分区,则会收到内存警报,然后您必须再次执行init。它不会为你完成。

除非您通过发布,否则系统通常不会释放您的对象。你无法对内存警报做任何反应,或者你可以释放一些视图,并与它们一起拥有一些自己的对象。

viewDidUnload是一种让你知道你的视图是否被卸载的方法,在这种情况下你应该通过并免费清理你在viewDidLoad中所做的事情。当您的视图重新启动时,将再次调用viewDidLoad,您将有机会重做所有初始化。

viewDidUnload可能就是你真正需要学习的东西:

  

viewDidUnload当调用时调用   控制器的视图已从中释放   存储器中。

     
      
  • (无效)viewDidUnload
  •   
     

讨论此方法称为a   与viewDidLoad方法相对应。   在低内存期间调用它   视图控制器的条件   需要释放它的观点和任何   与该视图关联的对象   释放记忆。因为看法   控制器经常存储引用   视图和其他与视图相关的对象,   你应该使用这种方法   放弃这些物品的所有权   这样他们的记忆就可以了   回收。你应该只为此而这样做   您可以轻松重新创建的对象   之后,在viewDidLoad中   方法或来自你的其他部分   应用。你不应该使用它   释放用户数据的方法或任何方法   其他不可能的信息   很容易重建。

     

通常,视图控制器存储   使用插座引用对象,   这是一个变量或属性   包括IBOutlet关键字和   使用Interface Builder配置。一个   视图控制器也可以存储   指向它创建的对象的指针   以编程方式,例如在   viewDidLoad方法。首选方式   放弃任何对象的所有权   (包括在商店中的那些)是使用   相应的访问器方法   将对象的值设置为nil。   但是,如果你没有   给定对象的访问器方法,   您可能必须释放该对象   明确。有关的更多信息   内存管理实践,请参阅   内存管理编程指南   为可可。

     

当调用此方法时,   查看属性为零。

     

特殊注意事项如果您的观点   controller存储对视图的引用   和其他自定义对象一样   负责放弃   安全地拥有这些物品   它的dealloc方法。如果你实施   这个方法,但正在建立你的   申请iPhone OS 2.x,你的   dealloc方法应该释放每个   对象但也应该设置   之前对该对象的引用为零   叫超级。