Sobes.tech
Junior — Middle
98

Pouvez-vous énumérer les principaux types de fuites de mémoire pouvant survenir lors de la programmation en Swift?

Réponse de l'IA

sobes.tech IA

В 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)
}

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