iOS - 内存警告后应用程序崩溃 - 仪器显示无泄漏

时间:2012-05-22 08:01:30

标签: ios xcode memory-leaks uiimage instruments

我正在开发一款使用AVCaptureSession的应用,以显示来自设备相机的“实时”视频流。我还使用AVCaptureVideoDataOutputSampleBufferDelegate方法从sampleBuffer捕获静态图像(UIImage),以便在视频仍在屏幕上显示时使用这些图像(使用OpenCV)。无论如何,有很多代码,比我在这里粘贴的要多得多,但这实际上不是重点。

应用程序会在几秒钟后显示内存警告,再过几秒钟后会静默崩溃。我试图使用Instruments检查泄漏和内存分配,但没有任何可疑的显示,根本没有泄漏,内存使用量永远不会超过5MB(整体和实时字节)。

如何找出触发内存警告的原因?

编辑:我试图在代码中添加一些故意泄漏,这些泄漏将出现在Instruments中,所以它似乎在理论上起作用......

2 个答案:

答案 0 :(得分:2)

我相信你遇到的问题与使用UIImage和Apple的幕后缓冲有关。使用iOS的PDF函数时遇到了类似的问题。由于您没有发布任何代码,我只能特别建议发布发布命令(即。CGImageRelease()CGContextRelease()等。)并始终牢记参考和实际之间的区别数据

答案 1 :(得分:1)

我刚刚找到了原因,虽然我不明白为什么乐器没有表现出来......

我使用了[t performSelectorInBackground:sel withObject:[self imageFromSampleBuffer:sampleBuffer]];

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

方法。在我评论出来后,应用程序运行正常。所以这里的问题是,虽然我在选择器中使用了NSLock,但应用程序会为每个选择器生成越来越多的线程,直到达到内存限制。所以这里的解决方案是在执行选择器之前使用锁,而不是在选择器方法内部。

感谢您的帮助。