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