В Objective-C Manual Reference Counting (MRC) требует от разработчиков явно управлять жизненным циклом объекта, отслеживая, сколько владельцев ссылаются на него в любой момент времени.
Три фундаментальных метода, которые ты должен понять:
retain — увеличивает reference count объекта, сигнализируя о владенииrelease — уменьшает reference count; когда он достигает нуля, объект удаляется из памятиautorelease — планирует отложенный release в конце цикла drain текущего autorelease poolretain с release — несоблюдение этого приводит к утечкам памяти или преждевременному удалениюretain, когда тебе нужно, чтобы объект сохранился за пределами текущей области видимостиrelease для объектов, которыми ты владеешь, когда они больше не нужныautorelease для объектов, возвращаемых фабричными методами, позволяя вызывающему коду взять владение при необходимости// Example ownership pattern
MyObject *obj = [[MyObject alloc] init]; // retain count = 1
[obj retain]; // retain count = 2
[obj release]; // retain count = 1
[obj release]; // retain count = 0 → deallocated
MRC очень подвержен ошибкам, потому что:
release вызывает утечки памятиrelease приводят к dangling pointers и крэшамAutomatic Reference Counting (ARC) был введён именно для того, чтобы избавиться от этих ручных шагов. ARC автоматически вставляет вызовы retain и release на этапе компиляции, применяя те же правила владения без какого-либо вмешательства разработчика. Понимание MRC остаётся полезным при поддержке legacy-кодовых баз и для глубокого понимания того, как Swift и ARC управляют памятью под капотом.
Метод autorelease немедленно уменьшает счетчик ссылок объекта, тогда как release планирует уменьшение на конец цикла опустошения текущего autorelease пула.
Новый — ещё не проверен сообществом
Вы