xcode – AVCam内存低警告

前端之家收集整理的这篇文章主要介绍了xcode – AVCam内存低警告前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这不是一个问题,更多的是我在Apple提供的针对iOS4和5相机操作提供的AVCam示例代码周围发现的内容的记录.我的问题的症状是我的应用程序将在拍摄5-10张照片后启动AVCamViewController时崩溃.

我通过内存泄漏分析器运行应用程序并且没有明显的泄漏但是在使用Activity Monitor进行检查时我发现每次启动相机时,mediaserverd的内容增加了17Mb,当它达到~100Mb时,应用程序崩溃了多个低记忆警告.

解决方法

Apple于2013年10月17日修改了示例代码,修复了保留周期.问题是由于在init中定义的块中不正确使用self.

这是修订说明

Fixed retain cycles in AVCaptureManager that result in leaks. NOTE – if you’ve adapted AVCam code in your app,you should adopt the fixes made here in AVCaptureManager.m‘s init method. Without these fixes,you may be leaking AVCaptureManager instances and leaving the camera running constantly while your app is in the foreground.

但是,它们引入的修复仅适用于手动保留计数.如果你在项目中使用ARC,除了摆脱释放/保留调用和其他明显的事情之外,weakSelf的存储限定符必须从__block更改为__weak,如下所示.

__weak AVCamCaptureManager *weakSelf = self;

实际上__block的语义随ARC而变化.在MRC中,它导致变量被弱引用,在ARC中它没有,并且__weak必须用于此目的.

有关此主题的更多信息,请访问:How do I avoid capturing self in blocks when implementing an API?

使用上一版本中的新init实现并使用__weak而不是__block,最终导致正确调用dealloc方法.

最后,对于那些讨厌携带旧遗留代码的人来说,这里是AVCam项目的现代化版本:https://github.com/Gabro/AVCam

特征:

>内存泄漏免费>使用ARC>现代Objective-C语法>针对iOS 7的次要UI修复

猜你在找的iOS相关文章