【发布时间】:2018-11-20 11:31:07
【问题描述】:
我想在 PDF 文档上合并 UIImage,然后它作为数据发送到 API。
但是在这种方法中,存在很大的内存泄漏!它从 20 MB 开始,然后上升到 390 MB,最后内存稳定在 300 MB。
这个方法有什么问题?
fileprivate func mergeImages(_ images: Array<UIImage>) {
DispatchQueue.global(qos: .utility).sync {
let width: CGFloat = 768
let height: CGFloat = 1024
let pageSize = CGSize(width: width, height: height);
let pageFrame = CGRect(x: 0, y: 0, width: width, height: height);
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, pageFrame, nil)
let ctx = UIGraphicsGetCurrentContext()
for i in 0 ..< images.count {
autoreleasepool {
let jpegData = UIImageJPEGRepresentation(images[i].resize(toSize: pageSize)!, 0.8)
let dp = CGDataProvider(data: jpegData! as CFData)
let cgImage = CGImage(jpegDataProviderSource: dp!, decode: nil, shouldInterpolate: true, intent: .defaultIntent)
UIGraphicsBeginPDFPage()
ctx?.translateBy(x: 0, y: height)
ctx?.scaleBy(x: 1.0, y: -1.0)
ctx?.draw(cgImage!, in: pageFrame)
}
//image.drawInRect(pageFrame)
}
UIGraphicsEndPDFContext()
let d = pdfData as Data
self.completion?(d)
}
}
【问题讨论】:
-
您应该查看“调试内存图”以验证内存是否泄漏。如果是这样,它将为您提供一些信息来解决问题。
-
@tersintersi 为什么你使用 CGImage 对象而不是直接绘制 UIImage 对象本身。
标签: ios swift pdf memory memory-leaks