本文主要分析ipad使用UIImagePickerController调用系统相机出现内存泄漏问题,经测试iphone上并未出现内存泄漏现象!
正文:
使用xcode自带内存分析工具发现在拍照过程中内存消耗很大,且随着拍照越来越多内存占用越来越多,最终使得程序挂掉,下图为拍照前后内存使用情况以及leak工具检测结果:
拍照前内存使用情况:
拍两张后内存使用情况:
leak工具检测结果:
以上检测结果是使用Xcode自带的debug和instruments中的leak工具检测,从leak工具检测结果可以清楚的看到拍照过程中存在内存泄漏点为:[AVCapturePhotoOutput init];AVCapturePhotoOutput作为照片输出流是ios10新出的,于是考虑用老的AVCaptureStillImageOutput作为图片输出重新写了一套拍照实现,经测试不再有内存泄漏。修改后leak检测结果如下图:
修改后leak检测结果:
注:目前在ios11上官方仍未修复AVCapturePhotoOutput存在的内存泄漏问题、经测试AVCaptureStillImageOutput在ios11上仍然可用,当然这只是一种过渡解决方案,已经向官方提了bug reporting,希望官方能尽快修复这一问题!
附:自定义相机实现并不复杂这里不再赘述