我通过内存泄漏分析器运行应用程序并且没有明显的泄漏但是在使用Activity Monitor进行检查时我发现每次启动相机时,mediaserverd的内容增加了17Mb,当它达到~100Mb时,应用程序崩溃了多个低记忆警告.
解决方法
这是修订说明
Fixed retain cycles in
AVCaptureManager
that result in leaks. NOTE – if you’ve adaptedAVCam
code in your app,you should adopt the fixes made here inAVCaptureManager.m
‘sinit
method. Without these fixes,you may be leakingAVCaptureManager
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修复