我对应用内存会发生什么有一些一般性的问题。
当应用进入后台或暂停时,内存会发生什么变化。我问这个是因为我的应用程序有一些内存泄漏,根据我的研究,在Apple的框架中存在漏洞而不是由于我的编码。泄漏相当小(约100字节),因此它们不应该破坏性能。但是,我想知道当用户停止使用应用程序时这些泄漏会发生什么?他们会离开还是永远留在手机的记忆中?
另外,另一个非常相似的问题,除了保留周期。当用户退出应用程序时,保留周期是否得到解决,假设在使用时崩溃应用程序不是一个大问题?
因此,简而言之,当用户退出应用程序时,分配和内存重置为0,这是我想要的。
感谢您的帮助!
答案 0 :(得分:4)
答案很复杂。
应用可以处于各种状态:
Active
Inactive
Running in the background
Suspended
Not running
除了“未运行”状态以外,应用程序都在内存中,并且内存泄漏会继续累积。
通常,当您的用户按下主页按钮时,应用程序会快速转换为非活动状态(仍然在前台运行但没有用户交互)到后台(仍在运行,但另一个应用程序具有焦点)并暂停(在内存中,但不是获取任何处理器时间。在此状态下,您的代码根本没有被调用。)当应用程序进入暂停状态之前,您会收到通知,因为应用程序将变为非活动状态和后台状态。
为了响应applicationDidEnterBackground消息,您需要保存需要保存的任何信息。
一旦应用程序处于暂停状态,它可以在没有任何进一步警告的情况下终止。如果您此时尚未将信息保存到文件中,则会丢失。
如果应用程序处于挂起状态,然后被唤醒到其中一个运行状态,则所有内存中的对象仍然存在,并且内存泄漏仍在累积。
正如@blobbfuesch所说,内存泄漏会导致您的应用程序耗尽越来越多的设备内存。如果您的内存使用量太大,系统会向您发出一个或多个内存警告,如果您没有释放足够的内存,它将终止您。
由于泄露的内存丢失,您无法将其释放。即使很小的泄漏也会增加。如果用户保持活动时间足够长,则会累积并导致应用程序终止,这对用户来说就像是崩溃。
如果应用程序在处于挂起状态时终止,它将从内存中卸载,并且必须在下次运行时重新启动。在这种情况下,先前泄露的内存会被恢复,但之后会再次泄漏。
答案 1 :(得分:2)