1

我正在开发一个应用程序,它使用AVCaptureSession, 来显示来自设备摄像头的“实时”视频流。我还使用从 sampleBufferAVCaptureVideoDataOutputSampleBufferDelegate中捕获静止图像 ( UIImage) 的方法来处理这些图像,同时视频仍在屏幕上显示(使用OpenCV)。无论如何,有很多代码,比我可以在这里粘贴的要多得多,但这实际上不是重点。

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

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

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

4

2 回答 2

2

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

于 2012-05-22T08:13:34.697 回答
1

我刚刚找到了原因,虽然我不明白为什么仪器不显示这个......

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

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

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

感谢你的帮助。

于 2012-05-22T08:25:21.957 回答