imaginary-cloud / CameraManager

Simple Swift class to provide all the configurations you need to create custom camera view in your app

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

deinit not called

ranhsd opened this issue · comments

Hi, I noticed that deinit is not being triggered for CameraManager. In my view controller I use it like this:

  lazy var cameraManager: CameraManager = {
       let cameraManager = CameraManager()
       cameraManager.shouldEnableTapToFocus = true
       cameraManager.shouldEnablePinchToZoom = true
       cameraManager.shouldRespondToOrientationChanges = true
       cameraManager.shouldKeepViewAtOrientationChanges = true
       cameraManager.cameraOutputMode = .stillImage
       cameraManager.cameraOutputQuality = .high
       cameraManager.writeFilesToPhoneLibrary = false
       cameraManager.animateShutter = false

       return cameraManager
   }()
   
   

   override public func viewDidLoad() {
       super.viewDidLoad()

       cancelButton.isHidden = true
       self.cameraManager.addLayerPreviewToView(self.previewLayer, newCameraOutputMode: .stillImage) {[unowned self] in
           DispatchQueue.main.async {
               self.cancelButton.isHidden = false
               self.previewLayer.bringSubview(toFront: self.captureButton)
           }
       }               
   }

When I close my view controller my deinit method is being triggered but camera manager deinit not. In order to deinit the camera manager as well you need to put the following in your deinit method (or in viewWillDisapper)

    deinit {
        cameraManager.stopCaptureSession()
    }

If this make sense please let me know and I will create a pull request and update the example project

Please feel free to PR. Thanks!

For anyone up to the task, the CMMotionManager handler should be using a weak reference to self:

coreMotionManager.startAccelerometerUpdates(to: OperationQueue(), withHandler: