out-of-memory - UIImagePickerController 内存泄漏问题
问题描述
在我的应用程序中,我使用 UIImagePickerController 来拍摄照片、视频、从图库中选择图像并将它们保存在应用程序文档目录中。如果我们启动相机并拍摄照片/视频,应用程序开始终止而没有任何崩溃日志。对于应用程序中每次启动相机,RAM 消耗都会增加,并且在一段时间后应用程序被终止,说“应用程序因内存问题而终止”。我在 XCode(10.1) 和 Instrument 工具中观察到了这种内存泄漏。
func takePhoto() {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera) {
self.mediaType = .Photo
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerController.SourceType.camera
imagePicker.allowsEditing = false
imagePicker.hidesBarsOnTap = true
imagePicker.isNavigationBarHidden = true;
self.present(imagePicker, animated: true, completion: nil)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
// Local variable inserted by Swift 4.2 migrator.
let info = convertFromUIImagePickerControllerInfoKeyDictionary(info)
if let image = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)] {
//Writing the image to document directory
}
picker.dismiss(animated: true, completion: nil)
}
// Swift 4.2 迁移器插入的辅助函数。
fileprivate func convertFromUIImagePickerControllerInfoKeyDictionary(_ input: [UIImagePickerController.InfoKey: Any]) -> [String: Any] {
return Dictionary(uniqueKeysWithValues: input.map {key, value in (key.rawValue, value)})
}
// Swift 4.2 迁移器插入的辅助函数。
fileprivate func convertFromUIImagePickerControllerInfoKey(_ input: UIImagePickerController.InfoKey) -> String {
return input.rawValue
}
XCode 10.1 Swift 4.2 iOS 版本 - 10.2.1 设备 RAM - 1GB/2GB 设备 - iPad Pro、iPad Mini 内存 - 16GB、64GB、32GB
您能否提供帮助并提出更好的解决方案
谢谢,
解决方案
推荐阅读
- python - 即使在 pip 中也找不到模块
- vue.js - VIDEO中的Vue + Quasar“不允许加载本地资源”
- android-fragments - 在另一个片段中读取用户选择的图像,并跨应用程序重新启动
- azure - 如何删除应用服务的孤立托管标识
- reactjs - 我们如何在map函数中具体使用来自api的数据呢?
- asp.net - 在我的 ASP.Net Web API 控制器中返回一个大文件
- mysql - 跨 2 个表的 SQL 聚合
- java - 在双向链表java中的特定索引处插入通用元素
- linux - 无法提交和推送到 github 存储库
- javascript - 如何知道 jQuery 是否被多次加载?(选择2错误)