Вопросы по управлению памятью в Swift - PullRequest
0 голосов
/ 03 декабря 2018

Я только начал изучать управление памятью, и у меня есть несколько вопросов.

Я использую пользовательскую камеру

var captureSession = AVCaptureSession()
  1. Нужно ли ставить слабуюссылка (weak var captureSession = AVCaptureSession()) на это или он будет автоматически освобожден после перехода на другой контроллер представления, который не использует указанный выше ресурс?В настоящее время я прекращаю сеанс захвата в viewDidDisappear

  2. Какую выгоду я получу, добавив weak self в следующую задачу?

    URLSession.shared.dataTask(with: url!) { [weak self](data, response, error) in {
    
    }
    
  3. Я обычно добавляю различных наблюдателей в текстовое поле, проверяю сеть и удаляю их в viewDidDisappear.Они полностью освобождаются от памяти или мне нужно сделать что-то сверх этого?

1 Ответ

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

1.AVCaptureSession:

Не устанавливайте слабое значение для вашей переменной captureSession, так как нет гарантии.Потому что ваш captureSession будет освобожден в любое время, когда он не используется.Также я рекомендую вам отключить функцию captureSession в viewWillDisappear.

Подробнее о слабых, сильных и т. Д. здесь :

2.weak self в блоке:

Когда ваш блок завершения удерживается некоторыми другими объектами, вам следует избегать циклов сильных ссылок.Таким образом, вы должны использовать weak self для таких блоков завершения.

Пожалуйста, обратитесь к этому сообщению для получения дополнительной информации.

3.Наблюдатели:

Если вы забыли сделать removeObserver для вашего класса, ваш класс будет удерживать этого наблюдателя, даже если вы заново инициируете тот же класс.

Пример: Если вы забыли удалить removeObserver в вашем ViewController, при повторном запуске того же контроллера ваш наблюдатель будет добавлен снова.Так что метод наблюдателя будет вызываться дважды и т. Д.

Но удаление наблюдателя достаточно и нет необходимости освобождать ваш textField или другие объекты, если вы используете ARC.

...