Xcode 9 Swift 4中UIImagePickerController内存泄漏问题咨询
UIImagePickerController 内存泄漏问题分享
嘿,我完全懂你碰到的这个坑!之前我在项目里用UIImagePickerController的时候也遇到了一模一样的内存泄漏问题,一开始把自己的代码翻了个底朝天,怀疑是循环引用或者没正确释放控制器,结果啥问题都没找到。直到去查苹果官方的PhotoPicker示例代码,发现官方代码居然也有这个泄漏!
一、泄漏现象的验证
我用Xcode的Instruments工具(Leaks模板)做了监测,只要正常打开再关闭UIImagePickerController,就能看到有内存对象没有被正确回收。而且官方示例里的实现逻辑和我们常规写法完全一致:实例化picker、设置代理、present展示,关闭时也正确调用了dismiss操作,完全没有明显的代码错误。
二、问题根源推测
目前来看这个泄漏更像是UIKit框架层面的问题,并非我们业务代码的锅。从官方文档的相关描述来看,UIImagePickerController的内部实现有不少我们无法直接干预的逻辑,可能在某些场景下(比如快速打开关闭、特定iOS版本)就会触发这个泄漏。
三、临时优化建议
虽然这是框架层面的问题,但我们可以做一些小调整来降低它的影响:
- 尽量复用
UIImagePickerController实例,不要每次需要选图都新建一个对象 - 在dismiss控制器之后,手动把picker的代理设置为
nil,避免潜在的间接引用残留 - 如果你的项目支持iOS14及以上版本,建议用
PHPickerViewController替代UIImagePickerController,它的内存管理表现要稳定很多,而且功能也更贴合现代iOS的设计
内容的提问来源于stack exchange,提问作者williammr
相关产品推荐
相关产品推荐

