Как очистить образ из оперативной памяти - PullRequest
0 голосов
/ 28 декабря 2018

Каждый раз, когда я вызываю функцию changeImage, изображение img будет меняться.Проблема заключается в том, что объем оперативной памяти, используемой приложением, будет увеличиваться при каждом изменении фотографии, даже если предыдущая фотография больше не отображается на экране.

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");
        }
    }
}

Я ожидаю удаления старых фотографий изОЗУ

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Согласовано с ответом @ Роба,

Только одно улучшение в избыточном коде, нет необходимости использовать switch-case, вместо этого вы можете использовать,

@IBAction func changeImage(_ sender: Any) {
    index += 1
    img.image = UIImage(named: "i\(index)")
}
0 голосов
/ 28 декабря 2018

UImage(named:) кэширует изображения (сохраняет их в памяти для повышения производительности, если вы будете использовать их снова).Они не будут удалены из памяти, если не будет давления памяти.

Как указано в документации :

Обсуждение

Этот метод ищет в системных кэшах объект изображенияс указанным именем и возвращает вариант этого изображения, который лучше всего подходит для основного экрана.Если соответствующий объект изображения еще не находится в кэше, этот метод находит и загружает данные изображения с диска или из доступного каталога активов, а затем возвращает полученный объект.

Система может удалить данные кэшированного изображения вв любое время, чтобы освободить память.Очистка происходит только для изображений, которые находятся в кэше, но в настоящее время не используются.

...

Особые замечания

Если у вас естьфайл изображения, который будет отображаться только один раз и который не будет добавлен в системный кеш, вам следует вместо этого создать свое изображение, используя imageWithContentsOfFile:.Это исключит одноразовое изображение из кэша системных изображений, что потенциально улучшит характеристики использования памяти вашего приложения.

Итог, если это изображение вы будете неоднократно использовать в своем приложении, вы можете пойти дальше и использовать UIImage(named:), будучи уверенными, что при нехватке памяти изображения будут выпущены.Но если это не то изображение, которое вы будете использовать повторно, рассмотрите возможность использования UIImage(contentsOfFile:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...