我注意到在学习CocoaTouch过去几周的工作原理时,当我在iPhone模拟器中退出应用程序时似乎没有调用dealloc
方法。现在,公平地说,我没有做任何太科学的事情 - 只需输入可以打印到控制台的NSLog
语句。我的问题是:
模拟器是否在应用程序出口处与Xcode断开连接,阻止我的NSLog
回显到控制台?
是否dealloc
未被调用为优化,因为该应用仍在退出?
当应用程序在实际的iPhone硬件上运行时,dealloc
会被调用吗?
答案 0 :(得分:10)
docs表示操作系统一次性回收内存的效率高于应用程序缓慢放弃所有内存块的效率。因此,dealloc
可能不会被发送到大量对象;对于这个的原因,重要的是不要管理dealloc
中的稀缺资源。要清理稀缺资源,让应用程序委托响应applicationWillTerminate:
并在那里进行清理可能是个更好的主意。
- (void) applicationWillTerminate:(NSApplication/UIApplication *) anApp
{
[scarceResourceManager relinquishScarceResources];
}
答案 1 :(得分:0)
正如dreamlax所说,系统会在应用程序退出后立即回收所有内存。因此,应用程序在退出时调用dealloc是没有用的。这是Mac OS X上的标准行为,我怀疑它在iPhone上会有所不同 - 模拟或“真实”。