ph1*_*psG 9 xcode memory-leaks uiimagepickercontroller ios swift
我已将我配置UIImagePickerController为拍摄图像并独立录制视频.的UIImagePickerController是直接从一个称为@IBAction(通过UIButton).我同时接收UIImage和URL从视频imagePickerController的委托方法,并打印出来用于测试目的.
稍等片刻(10秒钟)后,我选择了Xcode的"查看内存图历史记录",其中我可以看到在两个测试用例中我都有内存泄漏和循环引用.如果有人认为这是一个Xcode错误,我也可以在Instruments中看到那些内存泄漏.
录制视频时会发生这种情况:
当我拍照时会发生这种情况:
您可以在iOS 11.2设备上使用此代码重现此结果(我认为模拟器不起作用):
import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func takePhoto(_ sender: Any) {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .camera
picker.allowsEditing = false
self.present(picker, animated: true, completion: nil)
}
@IBAction func recordVideo(_ sender: Any) {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .camera
picker.allowsEditing = false
picker.mediaTypes = ["public.movie"]
picker.videoQuality = .typeHigh
self.present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
picker.dismiss(animated: true, completion: nil)
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
print(image.size)
}
if let video = info[UIImagePickerControllerMediaURL] as? URL {
print(video.path)
}
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:我可以解决那些有一些解决方法或我在我的代码中做错了什么,这是Apple的一个错误,我应该忽略它吗?
编辑:如果有人想看看整个项目:https://github.com/ph1ps/UIImagePickerLeak
我会说只是忽略你所看到的"漏洞".虽然,我没有任何代码支持这一点,但我确实有一些在工作中查找和修复内存泄漏的经验.根据我的经验,当你发现泄漏时,你会寻找吸烟枪.因此,对于内存图历史记录,如果有数百或数千个某些类型的实例泄露,我会怀疑可能存在内存泄漏.这适用于移动应用程序.从我从你的截图中看到的,你最多泄漏1k,这(假设甚至有泄漏)是非常微不足道的.因此,您似乎确实没有泄漏.
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |