UIImagePickerController在iOS 11上泄露

ph1*_*psG 9 xcode memory-leaks uiimagepickercontroller ios swift

我已将我配置UIImagePickerController为拍摄图像并独立录制视频.的UIImagePickerController是直接从一个称为@IBAction(通过UIButton).我同时接收UIImageURL从视频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

ent*_*erd 9

我会说只是忽略你所看到的"漏洞".虽然,我没有任何代码支持这一点,但我确实有一些在工作中查找和修复内存泄漏的经验.根据我的经验,当你发现泄漏时,你会寻找吸烟枪.因此,对于内存图历史记录,如果有数百或数千个某些类型的实例泄露,我会怀疑可能存在内存泄漏.这适用于移动应用程序.从我从你的截图中看到的,你最多泄漏1k,这(假设甚至有泄漏)是非常微不足道的.因此,您似乎确实没有泄漏.