Iphone 为什么launchd会杀死我的应用程序,它只使用2MB内存?

Iphone 为什么launchd会杀死我的应用程序,它只使用2MB内存?,iphone,ios,cocoa-touch,memory-management,Iphone,Ios,Cocoa Touch,Memory Management,我正在iPod touch上开发一个应用程序,它使用摄像头,显示预览和拍照(所有这些都是通过AVCaptureSession完成的)。 我不明白的是,我的应用程序有时会在内存警告后被启动而死掉……尽管它使用的内存不超过2MB(请参阅所附的屏幕截图)。 控制台告诉我 Aug 16 15:16:35 Wiggler[109] <Warning>: Received memory warning. Level=1 ... Aug 16 15:16:58 unknown com.apple.

我正在iPod touch上开发一个应用程序,它使用摄像头,显示预览和拍照(所有这些都是通过AVCaptureSession完成的)。 我不明白的是,我的应用程序有时会在内存警告后被启动而死掉……尽管它使用的内存不超过2MB(请参阅所附的屏幕截图)。 控制台告诉我

Aug 16 15:16:35 Wiggler[109] <Warning>: Received memory warning. Level=1
...
Aug 16 15:16:58 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.tMyCompany.Wiggler[0xd83d]) Exited: Killed: 9
Aug 16 15:16:35 Wiggler[109]:收到内存警告。级别=1
...
8月16日15:16:58未知的com.apple.launchd[1]:(UIKitApplication:com.tMyCompany.Wiggler[0xd83d])退出:终止:9
另一方面,我可以成功运行其他使用大量RAM(超过100MB)的应用程序,而不会出现任何崩溃或内存警告

我的应用程序有什么问题?我错过了什么?这是AVFoundation(提供AVCaptureSessions的框架)中的错误还是内存泄漏?我不明白为什么我的应用程序在使用如此少的内存时被杀死

谢谢你的帮助


几乎可以肯定,您使用的内存比分配显示的内存要多

从您的快照中,我觉得您没有使用VM Tracker工具。选择VM跟踪器的“自动快照”选项,然后检查“脏”和“驻留”大小

这将为你的应用程序内存使用提供一个更“全局”的视图。无论如何,它不会帮助您解决分配问题(如果有),但至少可以解释内存警告出现的原因


为了更好地解释什么是“脏”内存和“驻留”内存,

您几乎肯定使用了比分配显示的内存更多的内存

从您的快照中,我觉得您没有使用VM Tracker工具。选择VM跟踪器的“自动快照”选项,然后检查“脏”和“驻留”大小

这将为你的应用程序内存使用提供一个更“全局”的视图。无论如何,它不会帮助您解决分配问题(如果有),但至少可以解释内存警告出现的原因


为了更好地解释什么是“脏”和“驻留”内存,请尝试为较小的捕获配置AVCaptureSession,并查看这对脏内存使用的影响。GC无法收集正在使用的内存(作为捕获或预览等的一部分)。

尝试配置AVCaptureSession以获得较小的捕获,并查看这对脏内存使用有何影响。GC无法收集正在使用的内存(作为捕获或预览等的一部分)

我真的怀疑有100 MB活动字节的应用程序。如果所有视图控制器都使用DidReceiveMemoryWarning方法,那么尝试释放一些内存怎么样?你的应用程序中有韭葱吗?我不这么认为。应用程序一分钟前崩溃了。虽然Instruments之前确实发现了一些漏洞,但它没有超过32字节。我真的怀疑这个有100 MB活动字节的应用程序。如果所有视图控制器都使用DidReceiveMemoryWarning方法,那么尝试释放一些内存怎么样?你的应用程序中有韭葱吗?我不这么认为。应用程序一分钟前崩溃了。仪器确实在之前发现了一些漏洞,但是没有超过32字节。。。下面是运行VM跟踪工具的时间。但我并不完全理解。脏内存到底是什么?我在某个地方读到,这是我够不着的内存,应该由垃圾收集器处理,但这个解释听起来很奇怪。。。为什么GC会保留这么多脏内存?对此的任何澄清都将不胜感激!谢谢:)谢谢你的编辑。这是我一小时前读到的。但我不明白的是:这个脏内存会导致内存警告吗?如果是的话,我该怎么办(因为它是由GC查看的,它应该负责删除它,不是吗?)。。。下面是运行VM跟踪工具的时间。但我并不完全理解。脏内存到底是什么?我在某个地方读到,这是我够不着的内存,应该由垃圾收集器处理,但这个解释听起来很奇怪。。。为什么GC会保留这么多脏内存?对此的任何澄清都将不胜感激!谢谢:)谢谢你的编辑。这是我一小时前读到的。但我不明白的是:这个脏内存会导致内存警告吗?如果是的话,我该怎么办(因为它是由GC查看的,它应该负责删除它,不是吗?)