按下主屏幕上的iOS应用程序解除锁定按钮

按下主屏幕上的iOS应用程序解除锁定按钮,ios,objective-c,memory-management,Ios,Objective C,Memory Management,我没有使用ARC,对于应用程序挂起时我保留的所有对象会发生什么情况,我感到有点困惑 我看了一下这条线,但没有多大帮助: 我读过苹果关于多任务处理的文档,但找不到任何关于dealloc的具体信息 我运行了仪器,没有发现任何泄漏,但我不清楚当按下停止按钮时会发生什么 因此,我的问题是: 1) 为什么我的一些dealloc方法没有被调用?例如,我的UIResponder的dealloc没有被调用(当我双击iPad上的home按钮并删除我的应用程序时),我的UIViewController对象的dea

我没有使用ARC,对于应用程序挂起时我保留的所有对象会发生什么情况,我感到有点困惑

我看了一下这条线,但没有多大帮助:

我读过苹果关于多任务处理的文档,但找不到任何关于dealloc的具体信息

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

因此,我的问题是:

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

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

因为我的思维太习惯C++的思维方式了,因为应用程序的退出导致了析构函数被调用,所以我很难想象IOS等价物。 iOS部署目标:8.0

  • 您的应用程序只需发送到后台即可。它还在记忆中。如果用户重新启动你的应用程序,它就在它停止的地方。如果仅仅因为不在前景中就无缘无故地解除分配,那就太糟糕了。当用户双击Home(主页)按钮并删除应用程序时,该应用程序将被强制关闭。见#2
  • 当您点击Xcode中的停止按钮(或用户通过双击Home按钮终止应用程序)时,您的应用程序将被终止。应用程序进程已经结束。释放所有内存和其他资源。这是大锤。您的应用程序在没有任何通知的情况下终止。想象一下从命令行执行
    kill-9

  • 所有这些都与是否使用ARC无关。这与使用Objto-C或C++或Swift无关。那么,dealloc的意义是什么?它是什么时候调用的?它和C++中的析构函数一样。当没有更多的对象引用时调用它。它可能是一个简单的字符串超出范围或视图控制器被取消。是的,那么在应用程序生命周期的什么时候将不会引用UIResponder和它保留引用的UINavigationController对象?它与应用程序的生命周期无关。它与引用计数有关。对象在没有引用之前一直在内存中,然后被释放。对于导航控制器,这取决于它的使用方式。如果它是应用程序的根视图控制器,它将永远不会被释放。如果它被提交然后被驳回,那么当它被驳回时,它将被解除分配。我明白了。操作系统能硬杀死一个应用程序吗?(缺乏记忆?)。到目前为止,我的理解是,硬清除会清除应用程序使用的所有内存,并且不会调用导航控制器的解除分配。是这样吗?我发现这些线索很有帮助: