Работает ли автоматический подсчет ссылок как сборщик мусора?

В последней версии iOS Apple реализовала автоматический подсчет ссылок для Objective-C, но я не понимаю, как это работает.


person ADIMO    schedule 13.10.2011    source источник
comment
Пробовали ли вы просматривать документацию ? Или другая документация?   -  person jscs    schedule 13.10.2011
comment
Или просто выполните поиск здесь: stackoverflow.com/questions/6385212/   -  person jscs    schedule 13.10.2011
comment
Спасибо за вашу помощь, но я хотел только четкую информацию без чтения многих страниц документации... иначе не было бы причин задавать вопросы в stackoverflow...   -  person ADIMO    schedule 14.10.2011
comment
Stack Overflow ожидает, что вы проведете собственное исследование, прежде чем публиковать здесь. Это ресурс для тех случаев, когда вы уже пытались решить свою проблему самостоятельно. Кроме того, как я указал, здесь уже есть вопросы, которые вы могли прочитать.   -  person jscs    schedule 14.10.2011


Ответы (2)


Автоматический подсчет ссылок вставляет сообщения retain и release в ваш код во время компиляции, следуя обычным соглашениям. Таким образом, это точно так же, как если бы вы сами управляли памятью вручную, за исключением того, что компилятор достаточно умен, чтобы написать этот бит для вас, и вероятность ошибки гораздо меньше.

Так что это не сборка мусора, это больше похоже на (очень простую) форму статического анализа. И вы по-прежнему получаете чрезвычайно детерминированное управление памятью и небольшое общее изменение затрат времени выполнения, как следует из предостережений, поднятых Catfish_Man ниже.

person Tommy    schedule 13.10.2011
comment
Отсутствие изменений в стоимости выполнения не совсем точно. Компилятор должен быть значительно более консервативен, чем человек, в отношении времени жизни объекта, что обычно приводит к примерно на 20% большему количеству ссылок. С другой стороны, у ARC есть несколько изящных приемов, позволяющих во многих случаях избежать автоматического освобождения памяти, что может снизить использование памяти и повысить производительность. Будет ли это выигрыш или проигрыш с точки зрения производительности, зависит от конкретного рассматриваемого кода. - person Catfish_Man; 13.10.2011
comment
Хорошая точка зрения. Я смягчил свой ответ и сделал прямую ссылку на ваш комментарий. - person Tommy; 13.10.2011
comment
@Tommy: Вы говорите 100% детерминированный, но документы говорят, что ARC разрешено переупорядочивать и исключать операции таким образом, что это может изменить общую историю вычислений. clang.llvm.org/docs/ - person J D; 25.01.2014
comment
@JonHarrop, ты явно прав, поэтому я смягчил свой язык. То, что я пытался сообщить, было разницей между вещами, освобождаемыми непосредственно перед исчезновением их последней ссылки, и вещами, висящими до следующей уборки мусора. Очевидно, оттуда я сделал неточное утверждение. - person Tommy; 25.01.2014
comment
@Tommy: торчать до следующей уборки мусора. Большинство сборщиков мусора являются генерационными, поэтому большая часть мусора висит только внутри поколения-питомника, пока не будет перезаписана новым объектом. Это почти то же самое, что освобожденный объект зависает в распределителе памяти до тех пор, пока он не будет перезаписан новым объектом. - person J D; 26.01.2014
comment
@JanHarrop объект, который является кандидатом на сборку мусора, не уничтожается, пока сборщик мусора не найдет его. Вот почему, например. C# имеет специальный интерфейс IDisposible для работы с внешними ресурсами; В Java есть соглашение, основанное на явном закрытии внешних ресурсов. Объект deallocd уже был уничтожен и просто оставил след в памяти. Таким образом, первое — это реальная разница в семантике объекта, а второе — всего лишь плод реализации. - person Tommy; 26.01.2014

Автоматический подсчет ссылок реализует автоматическое управление памятью для объектов и блоков Objective-C, освобождая программиста от необходимости явно вставлять сохранения и освобождения. Он не предоставляет сборщик циклов; вместо этого пользователи должны явно управлять временем существования.

Прочтите эту спецификацию — Автоматический подсчет ссылок

person beryllium    schedule 13.10.2011