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

7hiiyaii  于 2023-08-08  发布在  iOS
关注(0)|答案(1)|浏览(117)

我正在与10天前出现的崩溃进行“斗争”,当我想与应用程序共享图片时,它仍然会出现。请注意,此功能在过去12个月内一直正常工作。
在共享应用扩展崩溃EXC_RESOURCE RESOURCE_TYPE_MEMORY(限制=120 MB,未使用=0x0)* 发生在UIImage.draw(在: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!
}}

字符串
共享扩展的内存使用限制为120MB,高于此限制的操作系统会使应用程序崩溃。我在矩形中绘制图像之前检查内存使用情况,正常值约为70MB,然后内存使用情况立即超过120MB(约130MB)。
崩溃大多发生在线路上:

self.draw(in:rect)

我不明白为什么记忆力会突然增加。有没有人知道这里发生了什么以及如何修复它?
谢谢大家。

mspsb9vt

mspsb9vt1#

如果您正在使用:
第一个月
尝试替换为选项NSDataReadingMappedIfSafe
Data(contentsOf: url, options: .mappedIfSafe)
处理大文件(主要是视频)将不再提供这种类型的错误。

  • 之前:*

  • 之后:*

相关问题