UIImagePickerController在启动后和拍照期间泄漏内存。拍摄超过100张照片后会导致应用崩溃

时间:2017-07-05 16:22:29

标签: swift3 memory-leaks uiimagepickercontroller

我几周来一直在努力解决这个问题。我已经在网上看到了这个问题,除了这2个局外人链接之外没有发现任何问题:

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的Instrumentals屏幕截图:

enter image description here

以下是与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上的一个错误,还是可以摆脱这个内存泄漏?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

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