iOS内存不足崩溃,但内存使用率很低

这已经很长时间令我烦恼了。 我的应用程序占用了大约2.74MB的内存。 没关系。 但是,当它创build一个UIWebView它上升到大约5.87MB并继续崩溃。 这是在我的第一代iPad上运行时在“乐器实时字节”中给出的值。

没有我能find的崩溃日志。 以下是从控制台:

MyApp[1205] <Warning>: Received memory warning. Level=1 MyApp[1205] <Warning>: applicationDidReceiveMemoryWarning SpringBoard[30] <Warning>: Received memory warning. Level=1 MobileMail[1199] <Warning>: Received memory warning. Level=1 configd[26] <Notice>: jetsam: kernel memory event (95), free: 428, active: 1853, inactive: 1011, purgeable: 338, wired: 15122 configd[26] <Notice>: jetsam: kernel termination snapshot being created com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilemail[0x8966]) Exited: Killed: 9 com.apple.launchd[1] <Notice>: (UIKitApplication:com.MyApp.MyApp[0xdd4f]) Exited: Killed: 9 SpringBoard[30] <Warning>: Application 'Mail' exited abnormally with signal 9: Killed: 9 kernel[0] <Debug>: launchd[1207] Builtin profile: MobileMail (sandbox) SpringBoard[30] <Warning>: Application 'MyApp' exited abnormally with signal 9: Killed: 9 configd[26] <Debug>: CaptiveNetworkSupport:UIAllowedNotifyCallback:70 uiallowed: false ReportCrash[1206] <Error>: libMobileGestalt loadBasebandMobileEquipmentInfo: CommCenter error: 1:45 ReportCrash[1206] <Error>: libMobileGestalt copyInternationalMobileEquipmentIdentity: Could not get mobile equipment info dictionary ReportCrash[1206] <Error>: Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2011-05-12-160645.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0 

我已经去除了所有对imageNamed的调用,改变了自动发布的东西来分配/释放。 但是我不知道为什么会发生这种情况,这让我疯狂。

谢谢你的帮助!

你几乎肯定会使用比你想象的更多的记忆。

看看你的应用程序真正使用了什么是不明显的,但是一旦你做了几次,你就会记得。

  1. 运行分配性能工具。
  2. 点击“Allocations”下面的VM Tracker“row”(在屏幕截图中)
  3. 点击“自动快照”

然后你会看到你的脏内存(目前20.34MB在我的屏幕截图)。

这应该让你更好地了解为什么你的应用程序正在退出。 你可能有一些大的泄漏发生。

祝你好运!

这个截图将有所帮助

我有两件事可以帮助添加:

  1. 正如前面的回答中所提到的,UIImage的bitmat不被认为是内存泄漏量泄漏告诉你你的应用程序正在使用! 所以你可能有很多UIImages使用大量的内存购买总额没有显示。 我的build议是使用Allocations检查在您的应用程序运行时创build和销毁的UIImage对象的数量。
  2. 正如在这个答案中提到使用下面的代码

     -(void) report_memory { struct task_basic_info info; mach_msg_type_number_t size = sizeof(info); kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size); if( kerr == KERN_SUCCESS ) { NSLog(@"Memory in use (in bytes): %u", info.resident_size); } else { NSLog(@"Error with task_info(): %s", mach_error_string(kerr)); } } 

查看操作系统分配您的应用程序的内存量。 这是你的应用程序正在使用的内存更准确的数字。 (你需要#import“mach / mach.h”)

干杯!

您快速按下该菜单button2次,您将看到应用程序点击所有应用程序的x,然后打开您需要的。