如何清除RAM内存中的图像

时间:2018-12-28 17:27:13

标签: ios swift uiimage

每次我调用changeImage函数时,img图像都会改变。问题是,每次更改照片后,即使屏幕上不再显示前一张照片,应用程序使用的RAM内存也会增加。

enter code here import UIKit
class ViewController: UIViewController {

    var takenImage = UIImage()

    @IBOutlet var img: UIImageView!
    @IBOutlet var buton: UIButton!

    var index = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    @IBAction func changeImage(_ sender: Any) {
        index+=1

        switch(index) {
          case 1:  img.image = UIImage(named: "i1")
          case 2:  img.image = UIImage(named: "i2")
          case 3:  img.image = UIImage(named: "i3")
          case 4:  img.image = UIImage(named: "i4")
          case 5:  img.image = UIImage(named: "i5")
          case 6:  img.image = UIImage(named: "i6")

          default: print("default");
        }
    }
}

我希望从RAM存储器中删除旧照片

2 个答案:

答案 0 :(得分:4)

UImage(named:)缓存图像(将图像保留在内存中以提高性能,如果您再次使用它们)。除非存在内存压力,否则不会将其从内存中删除。

the documentation说:

  

讨论

     

此方法在系统缓存中查找具有指定名称的图像对象,并返回最适合主屏幕的该图像的变体。如果匹配的图像对象尚未在缓存中,则此方法从磁盘或可用资产目录中定位并加载图像数据,然后返回结果对象。

     

系统可以随时清除缓存的图像数据以释放内存。清除仅对缓存中但当前未使用的图像进行。

     

...

     

特殊注意事项

     

如果您的图像文件仅显示一次,并希望确保不会将其添加到系统的缓存中,则应改用imageWithContentsOfFile:创建图像。这样可以将一次性图像排除在系统图像缓存之外,从而有可能改善应用程序的内存使用特性。

最重要的是,如果这是您将在应用程序中重复使用的图像,则可以选择继续使用UIImage(named:),并确信如果存在存储压力,这些图像将被释放。但是,如果这不是您要重复使用的图像,请考虑改为使用UIImage(contentsOfFile:)

答案 1 :(得分:0)

同意@Rob的回答,

只需对冗余代码进行一次改进,无需使用switch-case即可使用

@IBAction func changeImage(_ sender: Any) {
    index += 1
    img.image = UIImage(named: "i\(index)")
}