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

问题描述

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

在共享应用程序扩展崩溃中,Exc_Resource resource_type_memory(limit = 120 mb,unused = 0x0) 发生在uiimage.draw(in:rect)uiimage扩展方法时,当所选的共享图像开始绘制自身以绘制自身以cgrect preview viep视图。

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)

我无法弄清楚为什么会发生突然的内存增加。有没有人知道这里发生了什么以及如何解决它

谢谢你们。

标签: iosswiftiphoneimagememory

解决方案


推荐阅读