Почему есть предупреждение об использовании ARC в библиотеках Objective-C?

Я новичок в Objective-C и в настоящее время читаю об управлении памятью. Я хотел бы использовать ARC для наших общих библиотек, но в Документация по расширенному управлению памятью содержит несколько загадочное предупреждение:

Если вы планируете писать код для iOS, вы должны использовать явное управление памятью (тема этого руководства). Кроме того, если вы планируете писать библиотечные подпрограммы, подключаемые модули или общий код — код, который может быть загружен либо в процесс сборки мусора, либо в процесс, не связанный со сборкой мусора, — вы хотите написать свой код, используя описанные методы управления памятью. на протяжении всего этого руководства.

Я предполагаю, что первое предложение устарело, поскольку ARC, похоже, поддерживается в iOS 4 и более поздних версиях, но второе предложение, по-видимому, подразумевает, что для общих библиотек мы должны использовать MRR, а не ARC.

Я не понимаю, почему это может быть проблемой, поскольку я думал, что после компиляции не должно быть никакой разницы в вызове кода, поскольку вызовы подсчета ссылок были бы вставлены компилятором. Есть ли проблема с использованием ARC для разделяемых библиотек?


person Greg Beech    schedule 10.02.2012    source источник


Ответы (1)


Этот цитируемый раздел сформулирован неуклюже и, вероятно, не изменился с тех пор, как в этом руководстве просто проводилось различие между ручным сохранением-выпуском и сборкой мусора.

iOS не поддерживает и, вероятно, никогда не будет поддерживать сборку мусора. Однако, как вы заметили, iOS 4 полностью поддерживает ARC. Кроме того, ARC разработан таким образом, что не возникает реальных проблем при смешивании кода ARC с кодом, отличным от ARC (в отличие от кода со сборкой мусора, который не имеет такой роскоши). ARC — это рекомендуемый способ написания всего нового кода в будущем, включая код общей библиотеки, если вам не нужно ориентироваться на версии iOS до iOS 4.

В некотором смысле ARC — это явное управление памятью, а не ручное управление памятью. Однако, как я уже сказал, эта формулировка неудобна и написана до появления ARC.

person John Calsbeek    schedule 10.02.2012
comment
Спасибо, это почти подтверждает мои подозрения. Тогда я продолжу с ARC. - person Greg Beech; 10.02.2012