升级到 iPhone OS 4.0 后,在应用程序之间切换后应用程序开始崩溃。当应用程序收到内存警告时,应用程序在同一个地方崩溃。
当收到内存警告时,似乎某些对象会自动释放,然后当我们尝试使用释放的对象时,应用程序会崩溃。
是否可以测试一个对象是否已被释放,以便我们可以重新分配它们?
升级到 iPhone OS 4.0 后,在应用程序之间切换后应用程序开始崩溃。当应用程序收到内存警告时,应用程序在同一个地方崩溃。
当收到内存警告时,似乎某些对象会自动释放,然后当我们尝试使用释放的对象时,应用程序会崩溃。
是否可以测试一个对象是否已被释放,以便我们可以重新分配它们?
您无法测试特定对象是否已被释放,因为在释放后,该对象不再存在。您唯一能做的就是测试来自另一个对象的对可疑对象的引用是否仍然非零。
您在这里的问题不是释放本身,而是管理不善的保留。您有一个已被标记为不再使用的对象,系统正在按照系统应有的方式杀死它。您在低内存期间看到它的唯一原因是系统立即停止并耗尽所有释放池,而不是等待正常循环。
您需要确保已正确保留所需的所有对象,以免它们被不当释放。即使在内存不足的情况下,保留的对象也不会被释放。
我要补充一点,低内存崩溃的最常见原因是假设视图或视图中的资源始终存在,即使视图未显示也是如此。系统将清除低内存中未显示的视图及其资源(如图像)。检查didReceiveMemoryWarning
视图控制器。
你可以加
-(void)dealloc { ... }
如果它是正确的,则将其留空,并在其中添加断点。
这个答案正确ARC
和NON-ARC