Junior — Middle
97
Kannst du die wichtigsten Arten von Speicherlecks auflisten, die beim Programmieren in Swift auftreten können?
Antwort von AI
sobes.tech KI
В 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)
}
Таким образом, главное — контролировать сильные ссылки и использовать слабые или безвладельческие ссылки там, где это необходимо.