Ответ 1
Вы, кажется, говорите об автоматическом подсчете ссылок, упомянутом в других ответах. ARC - это своего рода GC, в котором он автоматизирует освобождение памяти, но имеет ряд отличий от хорошего сборщика мусора.
Во-первых, это в основном технология компилятора. Компилятор знает о Cocoa рекомендациях по подсчету ссылок, поэтому он вставляет сохраненные и выпуски, где они должны соответствовать правилам. Он работает так же, как если бы вы написали записи и освобождали себя - они просто вставляют их для вас. Нормальные сборщики мусора отслеживают вашу память программы во время ее работы.
Во-вторых, поскольку он похож на сохранение и освобождение, он не может улавливать циклы удержания (если объект А сохраняет объект B, а объект B сохраняет объект A, и ничто другое не ссылается ни на одно из них, они оба становятся бессмертными). Вам необходимо принять те же меры предосторожности, чтобы предотвратить их.
Он также использует ресурсы, отличные от автоматического сборщика мусора. Сборщики мусора, используемые с Objective-C, должны сканировать для неопубликованной памяти и собирать ее - что дорого, и могут привести к "заиканию" на более медленных системах, - но они должны делать это только иногда, и теоретически может даже тонко настраиваться их циклы сбора, чтобы соответствовать тому, как программа фактически использует свою память. В общем, программа GC будет использовать больше памяти, чем программа, отличная от GC, и значительно снизится, когда GC решит собирать. ARC, с другой стороны, перемещает "сканирование" на время компиляции и освобождает память, как только она доступна, но она должна постоянно обновлять подсчет ссылок на объекты, а не ждать, когда мусор будет создан как сборщик.