我正在开发我的第一个应用程序,用户可以保存 13 个屏幕截图并在一个 View Controller (全尺寸图像)之间滑动,并将它们作为缩略图一起显示在另一个 View Controller 上。以上是我保存图像的方法:
let fileName:String = self.stickerUsed + ".png"
var arrayPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
var pngFileName = arrayPaths.stringByAppendingPathComponent(fileName)
UIImagePNGRepresentation(screenshot).writeToFile(pngFileName, atomically:true)
NSUserDefaults.standardUserDefaults().setObject(fileName, forKey: self.stickerUsed)
NSUserDefaults.standardUserDefaults().synchronize()
以下是我检索图像的方法。这是第一个屏幕截图的代码,并将其设置为 UIImageView 中的图像(对其他 12 个 UIImageView 的操作类似):
var defaultName:String = "Sticker1.png"
let path = NSSearchPathForDirectoriesInDomains(
.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let fileName = NSUserDefaults.standardUserDefaults()
.stringForKey("Sticker1") ?? defaultName
let imagePath = path.stringByAppendingPathComponent(fileName)
let image = UIImage(contentsOfFile: imagePath )
Sticker1_view.image = resizeImage(image!, newSize: CGSizeMake(overView.frame.width/4, overView.frame.height/4))
这就是我在将它们加载到内存后按比例缩小它们的方法:
func resizeImage(image: UIImage, newSize: CGSize) -> (UIImage) {
let newRect = CGRectIntegral(CGRectMake(0,0, newSize.width, newSize.height))
let imageRef = image.CGImage
UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
let context = UIGraphicsGetCurrentContext()
// Set the quality level to use when rescaling
CGContextSetInterpolationQuality(context, kCGInterpolationHigh)
let flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height)
CGContextConcatCTM(context, flipVertical)
// Draw into the context; this scales the image
CGContextDrawImage(context, newRect, imageRef)
let newImageRef = CGBitmapContextCreateImage(context) as CGImage
let newImage = UIImage(CGImage: newImageRef)
// Get the resized image from the context and a UIImage
UIGraphicsEndImageContext()
return newImage!
}
该应用程序第一次运行良好。但是当我在两个 View Controller 之间切换时,它变得很慢,最终我收到内存警告,导致崩溃。据我研究了解,我的图像正在被缓存。我需要清除缓存或不要多次加载我的图像。或者也许在 didReceiveMemoryWarning() 中做一些事情以阻止它崩溃。我该怎么办?
最佳答案
关于ios - 由于图像加载而收到内存警告后应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30834900/