I am using this Photo Helper to pick pictures from phone or take a photo but every time I use it, it adds up to the memory use. The image is uploaded to Firebase and it doesn't have to be held in the memory anyway. How can I stop my app to stop adding up memory use every time an image is picked?
import UIKit
class MGPhotoHelper: NSObject {
// MARK: - Properties
var completionHandler: ((UIImage) -> Void)?
let imagePickerController = UIImagePickerController()
// MARK: - Helper Methods
func presentActionSheet(from viewController: UIViewController) {
let alertController = UIAlertController(title: nil, message: "Take Pic or Pick From Phone", preferredStyle: .actionSheet)
if UIImagePickerController.isSourceTypeAvailable(.camera) {
let capturePhotoAction = UIAlertAction(title: "Take Photo", style: .default, handler: { action in
self.presentImagePickerController(with: .camera, from: viewController)
})
alertController.addAction(capturePhotoAction)}
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
let uploadAction = UIAlertAction(title: "Upload from Phone", style: .default, handler: { action in
self.presentImagePickerController(with: .photoLibrary, from: viewController)
})
alertController.addAction(uploadAction)
}
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alertController.addAction(cancelAction)
viewController.present(alertController, animated: true)
}
func presentImagePickerController(with sourceType: UIImagePickerController.SourceType, from viewController: UIViewController) {
imagePickerController.sourceType = sourceType
viewController.present(imagePickerController, animated: true)
imagePickerController.delegate = self
}
}
extension MGPhotoHelper: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let selectedImage = info[.originalImage] as? UIImage {
completionHandler?(selectedImage)
let postDeal = PostDealVC()
postDeal.dealImage.image = selectedImage
picker.setNavigationBarHidden(false, animated: false)
picker.pushViewController(postDeal, animated: true)
} else {
return
}
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true)
}
}
tabbar middle button:
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController.title == "middleButton" {
photoHelper.presentActionSheet(from: self)
return false
} else {
return true
}
}