我正在开发一款使用AVCaptureSession
的应用,以显示来自设备相机的“实时”视频流。我还使用AVCaptureVideoDataOutputSampleBufferDelegate
方法从sampleBuffer捕获静态图像(UIImage
),以便在视频仍在屏幕上显示时使用这些图像(使用OpenCV
)。无论如何,有很多代码,比我在这里粘贴的要多得多,但这实际上不是重点。
应用程序会在几秒钟后显示内存警告,再过几秒钟后会静默崩溃。我试图使用Instruments检查泄漏和内存分配,但没有任何可疑的显示,根本没有泄漏,内存使用量永远不会超过5MB(整体和实时字节)。
如何找出触发内存警告的原因?
编辑:我试图在代码中添加一些故意泄漏,这些泄漏将出现在Instruments中,所以它似乎在理论上起作用......
答案 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
,但应用程序会为每个选择器生成越来越多的线程,直到达到内存限制。所以这里的解决方案是在执行选择器之前使用锁,而不是在选择器方法内部。
感谢您的帮助。