ios - 崩溃 - 共享应用程序扩展 - 图像 - 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)
我无法弄清楚为什么会发生突然的内存增加。有没有人知道这里发生了什么以及如何解决它?
谢谢你们。
解决方案
推荐阅读
- angular - 尝试区分“[object Object]”时出错。ionic 中只允许使用数组和可迭代对象
- c++ - 即使传递了函数,C++ 初始化变量仍保持打印为零
- c# - Dapper - 如何将记录作为自定义对象类型返回?
- reactjs - 如何将 TSX 源代码转换为 TS 代码?
- java - 单元测试基于 Spring Boot 的 REST 端点,它返回按给定方向排序的对象集合
- java - java.lang.NoClassDefFoundError: org/springframework/core/ErrorCoded
- flutter - 鼠标悬停时如何删除 ElevatedButton 周围的突出显示?
- numpy - 为什么numpy的vectorize函数对第一个元素执行两次
- javascript - 在我的加载状态上设置一个 setTimeout 以防止登录页面在用户完成身份验证之前闪烁是不好的做法吗?
- installation - 在一篇文章中进行环境配置时出现关于安装 pytorch-mpi 的错误