崩溃 - 共享应用程序扩展 - 图像 - iOS 13 - EXC_RESOURCE RESOURCE_TYPE_MEMORY(限制 = 120 MB,未使用 = 0x0)

T.J*_*rko 5 memory iphone image ios swift

我正在与 10 天前出现的崩溃进行“斗争”,当我想与我的应用程序分享图片时,它仍然出现。请注意,该功能在过去 12 个月内一直正常运行。

在共享应用程序扩展中,当要共享的选定图像开始将自身绘制到 CGRect 预览视图时,UIImage.draw(in: rect) UIImage 扩展方法会发生崩溃EXC_RESOURCE RESOURCE_TYPE_MEMORY(限制 = 120 MB,未使用 = 0x0) 。

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!
}}
Run Code Online (Sandbox Code Playgroud)

Share Extension 的内存使用限制为 120mb,超过该限制的任何内容都会导致应用程序崩溃。我检查了内存使用情况,在矩形中绘制图像之前,正常值约为 70MB,然后内存使用情况立即跃升至 120MB(约 130MB)。

崩溃主要发生在线路上:

self.draw(in: rect)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么内存会突然增加。

这里发生了什么以及如何解决它?