我正在与 10 天前出现的崩溃进行“斗争”,当我想与我的应用程序分享图片时,它仍然出现。请注意,该功能在过去 12 个月内一直正常运行。
在共享应用程序扩展中崩溃EXC_RESOURCE RESOURCE_TYPE_MEMORY(限制=120 MB,未使用=0x0) happens在 UIImage.draw(in: rect) UIImage 扩展方法中,当用于共享的选定图像开始将自身绘制到 CGRect 预览视图时。
extension UIImage {
func resizeImageOriginalSize(_ targetSize: CGSize) -> UIImage {
var actualHeight: Float = Float(self.size.height)
var actualWidth: Float = Float(self.size.width)
let maxHeight: Float = Float(targetSize.height)
let maxWidth: Float = Float(targetSize.width)
var imgRatio: Float = actualWidth / actualHeight
let maxRatio: Float = maxWidth / maxHeight
var compressionQuality: Float = 0.5
//50 percent compression
if actualHeight > maxHeight || actualWidth > maxWidth {
if imgRatio < maxRatio {
//adjust width according to maxHeight
imgRatio = maxHeight / actualHeight
actualWidth = imgRatio * actualWidth
actualHeight = maxHeight
}
else if imgRatio > maxRatio {
//adjust height according to maxWidth
imgRatio = maxWidth / actualWidth
actualHeight = imgRatio * actualHeight
actualWidth = maxWidth
}
else {
actualHeight = maxHeight
actualWidth = maxWidth
//compressionQuality = 0.5
}
}
let rect = CGRect(x: 0.0, y: 0.0, width: CGFloat(actualWidth), height: CGFloat(actualHeight))
UIGraphicsBeginImageContextWithOptions(rect.size, false, CGFloat(compressionQuality))
self.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}}
Share Extension 的内存使用限制为 120mb,超过该限制的任何内容都会导致应用程序崩溃。我检查了内存使用情况,在矩形中绘制图像之前,正常值约为 70MB,然后内存使用情况立即跃升至 120MB(约 130MB)。
崩溃主要发生在线路上:
self.draw(in: rect)
我不明白为什么内存会突然增加。
这里发生了什么以及如何解决它?
如果您正在使用:
Data(contentsOf: url)
尝试用选项替换它NSDataReadingMappedIfSafe:
Data(contentsOf: url, options: .mappedIfSafe)
使用大文件(主要是视频)将不再提供此类错误。
Before:
After:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)