如何从 RAM 存储器中清除图像

Luc*_*ian 6 uiimage ios swift

每次我调用 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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*Rob 6

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

正如文档所说:

讨论

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

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

...

特别注意事项

如果您有一个只会显示一次的图像文件并希望确保它不会被添加到系统的缓存中,您应该改为使用imageWithContentsOfFile:. 这将使您的一次性图像远离系统图像缓存,从而有可能改善应用程序的内存使用特性。

底线,如果这是您将在应用程序中重复使用的图像,您可以选择继续使用UIImage(named:),确信如果有内存压力,图像将被释放。但如果这不是您将重复使用的图像,请考虑使用UIImage(contentsOfFile:)