Junior — Middle
Можеш ли да набројиш главне врсте цурења меморије која могу настати при програмирању у Swift-у?
sobes.tech АИ
Одговор од АИ
У 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)
}
Стога, главно је контролисати јаке референце и користити слабе или безвласничке референце тамо где је то потребно.