每次我调用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存储器中删除旧照片
答案 0 :(得分:4)
UImage(named:)
缓存图像(将图像保留在内存中以提高性能,如果您再次使用它们)。除非存在内存压力,否则不会将其从内存中删除。
讨论
此方法在系统缓存中查找具有指定名称的图像对象,并返回最适合主屏幕的该图像的变体。如果匹配的图像对象尚未在缓存中,则此方法从磁盘或可用资产目录中定位并加载图像数据,然后返回结果对象。
系统可以随时清除缓存的图像数据以释放内存。清除仅对缓存中但当前未使用的图像进行。
...
特殊注意事项
如果您的图像文件仅显示一次,并希望确保不会将其添加到系统的缓存中,则应改用
imageWithContentsOfFile:
创建图像。这样可以将一次性图像排除在系统图像缓存之外,从而有可能改善应用程序的内存使用特性。
最重要的是,如果这是您将在应用程序中重复使用的图像,则可以选择继续使用UIImage(named:)
,并确信如果存在存储压力,这些图像将被释放。但是,如果这不是您要重复使用的图像,请考虑改为使用UIImage(contentsOfFile:)
。
答案 1 :(得分:0)
同意@Rob的回答,
只需对冗余代码进行一次改进,无需使用switch-case
即可使用
@IBAction func changeImage(_ sender: Any) {
index += 1
img.image = UIImage(named: "i\(index)")
}