由于图像加载,应用程序在收到内存警告后崩溃

时间:2015-06-14 21:47:28

标签: ios xcode swift ipad uiimageview

我正在开发我的第一个应用程序,用户可以在其中保存13个屏幕截图并在一个视图控制器(全尺寸图像)之间滑动,并将它们作为缩略图一起显示在另一个视图控制器上。以上就是我保存图片的方式:

append(_,[b(F,ND,P)|Rest],Visited).

以下是我检索图片的方法。这是第一个屏幕截图的代码,并将其设置为UIImageView中的图像(类似于其他12个UIImageViews):

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()

这是我在加载到内存后缩小它们的方式:

    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))

该应用程序第一次正常工作。但是当我在两个视图控制器之间切换时,它会变慢,最终我得到一个内存警告,导致崩溃。根据我的研究理解,我的图像正在被缓存。我需要清除我的缓存或不要多次加载我的图像。或者也许在didReceiveMemoryWarning()中做一些事情以阻止它崩溃。我该怎么办?

2 个答案:

答案 0 :(得分:0)

如果程序中有任何内存泄漏,您可以使用配置文件(Product->Profile)来查看。

您可以查看此tutorial

希望这可以帮助您解决内存问题。

答案 1 :(得分:0)

经过一整夜的尝试。我设法阻止了应用程序的减速和崩溃。 因为我在应用程序中多次使用图像。最好使用:

let image = UIImage(named: imagePath )

而不是:

let image = UIImage(contentsOfFile: imagePath )

这样,图像被缓存并带到前面。应用程序不再崩溃