ide*_*ide 4 memory-pressure ios ios7
我试图了解导致iOS系统重新启动因内存压力而终止的应用程序的条件.尽管如此,创造足够的记忆压力仍然很难
目前我的方法是通过Xcode启动我的应用程序,后台它,并启动一个吃内存的帮助应用程序.它在NSTimer循环中分配内存位,直到iOS系统终止它为止.当我很幸运时,Xcode告诉我,我的主应用程序是"由于内存压力而终止".
我正在寻找一种更可靠的方法来实现这一目标.是否有更好的内存分配技术或私有API用于此目的?
我对你所描述的行为感到有些惊讶,但有些想法:
据我所知,iOS不保证应用程序被抛弃的顺序,也不保证所有后台应用程序都会被抛弃(或者它是否只是试图抛弃足够的应用来缓解内存压力状况).将在iOS和小牛队处理内存不足的情况提供了一些线索,但是我不能保证它.但操作系统正在使用一些复杂的逻辑,所以我会毫不犹豫地对必须采取的步骤做出任何坚定的声明,以确保特定的应用程序被抛弃.
这个背景应用程序被抛弃的顺序问题会受到您允许助手应用程序崩溃这一事实的影响.后台应用程序可能不会被足够快地抛弃以满足您的帮助应用程序的分配尝试.因此,在iOS开始抛弃您的主应用程序之前,帮助应用程序可能会崩溃.
我可能会建议辅助应用程序的设计略有不同,这样当它收到内存警告时,它会释放它请求的所有内存并再次启动进程.在我的"因为内存压力"应用程序中,我实际上在收到内存警告和重新启动分配的过程之间等待几秒钟停止分配.
但是,最重要的是,我认为您可能希望确保帮助应用程序不会崩溃,以确保您充分运用内存压力系统.
您描述了等待Xcode中的调试器报告应用程序已终止.我可能会建议重复您的实验,直接在设备上运行主应用程序,但不能通过调试器.我建议这是因为理论上可能会让我觉得你的应用程序附加到调试器的事实可能会影响优先级计算,以确定哪些应用程序将被抛弃.
由于应用程序将被杀死,无论如何都无法通过调试器运行它,因为如果操作系统执行某些操作来重新启动应用程序(例如后台NSURLSession
,推送通知等),您的调试会话无论如何都会消失.因此,通过调试器运行它是没有意义的,以便观察"如果操作系统重新启动我的应用程序会怎么样"的问题.
就个人而言,在诊断被抛弃,重新启动等应用程序的行为时,我使用Xcode设备管理器,并在那里观察设备的控制台.您可以在控制台中观察任何应用程序的NSLog语句,以及观看被抛弃的应用程序,重新启动应用程序(如果操作系统确实在重新启动它),等等.
归档时间: |
|
查看次数: |
1038 次 |
最近记录: |