Pull to refresh

Comments 15

Примечательно, что ARC мирно сосуществует с “не-ARC” кодом с ручным управлением памятью в одном и том же приложении.
Если вы работаете уже с существующей базой кода, изменение этой настройки может повлечь за собой громадное число ошибок. ARC не только управляет памятью вместо вас, но и запрещает вам делать это собственноручно.
немного противоречиво получается. все-таки как с этим реально обстоит дело?
Насчет существующей базы, думаю, следует понимать так: если вы сконвертили «олд скул» код под использование АПС, то из-за того, чтоб эффективно использовать память в вашем приложении и избежать утечек (впрочем, как говорит автор и я с ним согласен, в официальных фреймворках), вы должны использовать пресловутые retain/release/autorelease (см. п.1 и п.2 из правил в статье). Это неизбежно, если вы хотите, чтоб ваше приложение не текло. Сосуществование происходит в том случае, если у вас сбалансированы retain и release. В этом случае АПС нормально воспримет ваш код. :)
Это мое понимание вопроса.
Как на самом деле обстоит — в планах попробовать сконвертить «что-нить эдакое» на выходных, если будет возможность.
ARC-код может линковатся с не-ARC бибилотеками и наоборот. Но каждый отдельный Target в проекте должен быть либо ARC- либо не-ARC
Как я думаю, в общих чертах вы правы. Одно замечание: линковка будет нормальной ТОЛЬКО после того, как вы сконвертировали проект под АПС и включили ту самую опцию в настройках.
Не очень понял что вы имели ввиду. У нас есть свой проект, например игра и мы хотим использвать ARC. Есть cocos2d, который мы тоже хотим использовать, но который не поддерживает ARC. cocos2d подключается к проекту как статическая библиотека. В этом случае нам нет необходимости конвертировать cocos2d в ARC. Наш проект может использвать ARC, cocos2d будет использвать retain/release и оба они будут нормально линковатся друг с другом.

Если владеете английским, лучше посмотрите презентацию с WWDC «Introducing Automatic Reference Counting». Статья — ее вольный пересказ с кучей неточностей
Спасибо. Про статическую библиотеку вы правы, про таргеты тоже.
Отдельное спасибо за конференцию, упустил.
arc можно выключать даже для отдельных файлов, поэтому вроде как все хорошо
для тех, которые возможно читают этот тред, подробные инструкции со StackOverflow:
1) Зайти в Build Phases проекта;
2) Открыть Compile Sources (там будут только те исходники, которые используются для получения бинарников. Не удивляйтесь, если там не будет некоторых файлов, которые вы используете для либ);
3) Выделить файлы, в которых нужно использовать ARC. Кликнуть по ним, появится окошко, ввести туда "-fobj-arc"
«прим. переводчика: Совершенно не понял смысл этого пассажа в контексте разбора ARC. Возможно, автор допустил опечатку, вместо zeroing weak references должно быть non-zeroing weak references»

Наверно имелось в виду что zeroing weak reference доступны только в IOS >=5 и MacOS >= 10.7,
а в предыдущих версиях weak останется тоже самое что assign.
Спасибо, это очень ценное для меня лично замечание. Вероятно, Майк это и хотел сказать.
С автоматическим удалением ivar'ов не все так просто и прозрачно в ARC для блоковых переменных.
если блок объявлен как:
@property( copy ) BlockType simpleBlock;
то в деаллоке нужно будет сделать self.simpleBlock = nil; руками иначе будет утечка.
Упомяните, пожалуйста, ссылочки на блоги остальных разработчиков тоже.
UFO just landed and posted this here
Сразу хвататься за ARC не стоит. Все-таки ARC есть некоторая надстройка над уже существующей системой. Настоятельно советую сначала понять модель управления памятью, а потом переходить на ARC.
Sign up to leave a comment.

Articles