按下主页按钮时的 iOS 应用程序 dealloc

标签 ios objective-c memory-management

我没有使用 ARC,我对应用暂停时我保留的所有对象会发生什么感到有点困惑。

我看过这个帖子,但没有太大帮助:

iPhone. Shouldn't hitting the home button cause UIApplicationDelegate's dealloc to be called

我已经阅读了有关多任务处理的苹果文档,但找不到任何关于 dealloc 的具体信息。

我运行了仪器,没有发现任何泄漏,但我不清楚按下停止按钮时会发生什么

所以我的问题是:

1) 为什么我的一些 dealloc 方法没有被调用?例如,我的 UIResponder 的 dealloc 没有被调用(当我双击 iPad 上的主页按钮并删除我的应用程序时),我的任何 UIViewController 对象的 dealloc 也没有被调用。

2) 当我按下 Instruments 上的停止按钮时(当它正在运行检查泄漏时),应用程序处于什么模式? (例如不活动、背景、暂停......其他?)

由于我的头脑太习惯了 C++ 的思维方式,即应用程序退出会导致调用析构函数,所以我很难想象 iOS 的等价物。

iOS 部署目标:8.0

最佳答案

  1. 您的应用只是发送到后台。它仍然在内存中。如果用户重新启动您的应用程序,它就在它停止的地方。如果只是因为它不在前台而无缘无故地释放任何东西,那就太糟糕了。当用户双击主页按钮并删除该应用程序时,该应用程序将被严重杀死。参见#2。
  2. 当您点击 Xcode 中的停止按钮(或用户通过双击主页按钮终止应用程序)时,您的应用程序将被终止。应用程序进程消失了。释放所有内存和其他资源。这是大锤。您的应用程序已终止,没有任何形式的通知。想象一下从命令行执行 kill -9

这些都与是否使用 ARC 无关。这些都与使用 Objective-C、C++ 或 Swift 无关。

关于按下主页按钮时的 iOS 应用程序 dealloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33228733/

相关文章:

iphone - ZoomingPDFViewer无法在启用分页的UIScrollViewer中缩放

java - 如何在使用 HashMap<String,List<SomeObject>> 时最小化垃圾回收

ios - NSCoder对c数据类型的编码和解码

memory-management - 如何使用基址寄存器、限制寄存器和重定位寄存器?

Java + JavaFX : does it make sense to periodically clear a ListView content on the long run?

objective-c - iOS 应用程序发布到 Facebook 但未找到链接

ios - 在 iPhone 中的 2 个应用程序之间共享数据

ios - 具有自定义颜色的 UIColor 扩展是真实的吗?

iphone - 使用: id <class> instanceName?创建对象是什么意思

ios - 多次使用后 AVPlayer 崩溃 - iOS