【问题标题】:UIImagePickerController leaking memory after launch and during taking a picture. Makes app crash after taking more than a 100 picturesUIImagePickerController 在启动后和拍照期间泄漏内存。拍摄超过 100 张照片后使应用程序崩溃
【发布时间】:2017-12-09 10:20:13
【问题描述】:

我已经为这个问题苦苦挣扎了好几个星期了。我在网上到处查看,除了这两个外部链接之外,没有发现任何与此问题相关的内容:

https://github.com/cordova-plugin-camera-preview/cordova-plugin-camera-preview/issues/200

https://issues.apache.org/jira/browse/CB-11784

但是那些没有使用相同的环境,并且没有实际的解决方案。

这是我在启动 imagePicker 并拍照后使用 Xcode 8.3 的乐器截图:

这里是imagePicker相关的代码:

      //initializer on my class
      var imagePicker = UIImagePickerController()

      //imagepicker setup on ViewDidLoad()

      imagePicker.delegate = self
      imagePicker.allowsEditing = false
      imagePicker.mediaTypes = [kUTTypeImage as String]

      if UIImagePickerController.isSourceTypeAvailable(.camera) {
          imagePicker.sourceType = .camera

      }
      else {
        print("Sorry this app only supports camera")
      }


      //function to start picker when click on button
      func startPicker(){

        self.present(imagePicker, animated: false, completion: nil)

      }

       //delegate functions

      func imagePickerControllerDidCancel(_ picker: UIImagePickerController)
      {
                imagePicker.dismiss(animated: false, completion: nil)
      }

      func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
      {

           //display photo on view

           imagePicker.dismiss(animated: false, completion: nil)

      }

这是 IOS 上的错误还是有办法摆脱这种内存泄漏?

【问题讨论】:

  • 您并不孤单,我可以使用类似的最少代码在 iOS 10.3.3 和 Xcode 8.3.3 上重现这一点。 “其他进程”内存使用量随着每张照片的拍摄而逐渐增加,直到所有系统内存用完,然后应用程序崩溃并显示“丢失连接”消息并且应用程序中没有异常(因为泄漏似乎在 UIImageViewController 代码中)。
  • 感谢@davidgoli 的链接,我很高兴知道我不是唯一一个。我可以通过简单地在我的应用程序上显示图像视图来重现此问题。在拍摄 40-50 张照片后,它无论如何都会崩溃。这很烦人,我仍在为此苦苦挣扎。

标签: swift3 memory-leaks uiimagepickercontroller


【解决方案1】:

我只想指出,从 IOS 12 开始,这个问题仍然存在,我不得不使用 AVFoundation 的摄像头来避免崩溃。使用 AVFoundation,我可以拍摄数百张照片,并且不会发生内存泄漏。

【讨论】:

    【解决方案2】:

    我也有这个问题。它似乎是 UIImagePickerController 中的一个已知错误。

    我在这里创建了一个最小的复制应用程序:https://github.com/davidgoli/UIImagePickerLeakTest

    我通过使用https://github.com/imaginary-cloud/CameraManager 实现我自己的相机控制器解决了这个问题。

    【讨论】:

    • 我在提交错误报告后收到了 Apple 的回复。他们将我的错误报告作为重复项关闭,并验证此问题存在另一个未解决的错误。由于它在 NDA 下,因此无法在此处链接到原始错误报告。
    • @davidgoli 你是如何解决这个 UIImagePickerController 问题的多图片点击问题?如果点击 40-50 张图片,我将面临 iOS 10.3 崩溃。
    • @Mrunal 在原帖中看到我的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多