Утечка памяти происходит, когда выделенная память больше не нужна, но так и не освобождается, потому что на неё всё ещё существует хотя бы одна сильная ссылка. Со временем это приводит к увеличению потребления памяти, что вызывает деградацию производительности или крах приложения.
Swift использует Automatic Reference Counting (ARC) для управления памятью. ARC освобождает объект только тогда, когда счётчик ссылок на него достигает нуля. Однако ARC не может разрешить циклические ссылки — ситуации, когда два или более объекта держат сильные ссылки друг на друга, что предотвращает освобождение любого из них.
strong ссылки друг на другаself сильно — частая причина утечек в асинхронных коллбэках или сохранённых замыканияхweak ссылкиweak ссылки для делегатов и обратных ссылок между родительскими/дочерними объектами:weak var delegate: SomeDelegate?
[weak self] или [unowned self] в замыканиях, чтобы избежать захвата сильной ссылки:networkCall { [weak self] result in
self?.handleResult(result)
}
unowned только когда ты уверен, что объект проживёт дольше, чем замыканиеLeaks и Allocations) для обнаружения утекающих объектов во время выполненияARC автоматически управляет большей частью памяти, но циклические ссылки нужно разрывать вручную с помощью weak или unowned ссылок — особенно в замыканиях и паттернах с делегатами.
Утечка памяти в Swift происходит, когда счётчик ссылок объекта достигает нуля, но память не освобождается немедленно ARC.
Новый — ещё не проверен сообществом
Вы