ios - 调整 UIImage 大小时内存泄漏

标签 ios swift xcode memory-leaks uiimage

我已经通读了有关该主题的多个线程,但我的问题仍然存在。 当我使用以下代码调整图像大小时:

extension UIImage {
  func thumbnailWithMaxSize(image:UIImage, maxSize: CGFloat) -> UIImage {
    let width = image.size.width
    let height = image.size.height
    var sizeX: CGFloat = 0
    var sizeY: CGFloat = 0
    if width > height {
        sizeX = maxSize
        sizeY = maxSize * height/width
    }
    else {
        sizeY = maxSize
        sizeX = maxSize * width/height
    }

    UIGraphicsBeginImageContext(CGSize(width: sizeX, height: sizeY))
    let rect = CGRect(x: 0.0, y: 0.0, width: sizeX, height: sizeY)
    UIGraphicsBeginImageContext(rect.size)
    draw(in: rect)
    let thumbnail = UIGraphicsGetImageFromCurrentImageContext()!;

    UIGraphicsEndImageContext()

    return thumbnail

}


override func viewDidLoad() {
    super.viewDidLoad()

    let lionImage = UIImage(named: "lion.jpg")!

    var thumb = UIImage()

    autoreleasepool {
        thumb = lionImage.thumbnailWithMaxSize(image: lionImage, maxSize: 2000)
    }
    myImageView.image = thumb
}

...内存未释放。因此,当我浏览多个 ViewController(例如使用 PageViewController)时,我最终会收到内存警告并且应用程序最终会崩溃。 我还尝试通过 UIImage(contentsOfFile: path) 加载图像但没有成功。 有什么建议么?

最佳答案

我注意到您的代码开始了两个上下文,但只结束了一个。

这是我的扩展,与你的基本相同。由于我没有内存问题,看来这可能是问题所在。

extension UIImage {
    public func resizeToRect(_ size : CGSize) -> UIImage {
        UIGraphicsBeginImageContext(size)
        self.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext();
        return resizedImage!
    }
}

关于ios - 调整 UIImage 大小时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46073021/

相关文章:

ios - 如何使用数据库中的键将对象添加到 NSArray?

ios - Swift iOS 应用程序 - 使用动态更改的行静态分配表属性

swift - 通过 Firebase Swift 显示和更新注释

swift - Swift如何从Set removeFirst中捕获错误?

ios - 报亭应用程序的 Info.plist 必须包含 UINewsstandApp.error.message=true

iOS 和 Armadillo (mach-o,但不是为 iOS 模拟器构建的)

ios - UICollection 手动加载更多单元格 Swift

ios - 从 Storyboard修改定制的单元格

iphone - 如何将耗时显示为人类可读的字符串,如 "10 seconds ago"或 "3 hours ago"?

iphone - 如何使此图像选择器在iPad上工作?