Sobes.tech
Назад к вопросам
Junior — Middle
62

Можешь ли ты перечислить основные виды утечек памяти, которые могут возникнуть при программировании на Swift?

Ответ от нейросети

sobes.tech AI

В Swift основные виды утечек памяти связаны с циклическими ссылками (retain cycles), которые возникают, когда объекты удерживают друг друга, и ARC (Automatic Reference Counting) не может освободить память. Основные случаи:

  • Циклические ссылки между классами: два объекта класса с сильными ссылками друг на друга.
  • Замыкания, захватывающие self: если замыкание захватывает self без использования [weak self] или [unowned self], это приводит к циклу.
  • Сильные ссылки в делегатах: если делегат объявлен как сильная ссылка, а объект делегата ссылается обратно.

Пример утечки с замыканием:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // захват self сильной ссылкой
        }
    }
}

Чтобы избежать, используют слабые ссылки:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Таким образом, главное — контролировать сильные ссылки и использовать слабые или безвладельческие ссылки там, где это необходимо.