我正在捕获 UIView 的随机大小/形状的部分并使用 UIImagePNGRepresentation 保存到磁盘。文件按预期保存,但是当我在设备上运行时,我得到可怕的“收到内存警告”,即使我所做的只是在循环中保存文件而不显示它们:
UIGraphicsBeginImageContextWithOptions(bbox.size, false, 0)
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.25).CGColor)
CGContextAddRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, bbox.width, bbox.height))
CGContextFillPath(UIGraphicsGetCurrentContext())
let strokeImage = UIGraphicsGetImageFromCurrentImageContext()
let strokeFile = "stroke_\(strokeBezierArrayMemory.count).png"
let dataPng = UIImagePNGRepresentation(strokeImage)
let fileURL = folderURL!.URLByAppendingPathComponent(strokeFile) //println("\(fileURL)")
if (dataPng.writeToURL(fileURL, options: .AtomicWrite, error: &error) ) {
//println ("WROTE \(fileURL)")
} else {
print (error)
}
我看过类似的帖子,但没有解决我问题的答案。 这篇文章建议使用 AVFoundation,但我希望我能坚持使用 UIImagePNGRepresentation。
我还尝试将代码的 NSData 部分包装在 autoreleasepool 闭包中,但无济于事:
autoreleasepool({ () -> () in
let strokeFile = "stroke_\(strokeBezierArrayMemory.count).png"
let data = UIImagePNGRepresentation(strokeImage)
let fileURL = folderURL!.URLByAppendingPathComponent(strokeFile) //println("\(fileURL)")
if (data.writeToURL(fileURL, options: .AtomicWrite, error: &error) ) {
//println ("WROTE \(fileURL)")
} else {
print (error)
}
})
有没有办法强制 NSData 在写入磁盘后释放每个 dataPng?