Comments 15
Примечательно, что ARC мирно сосуществует с “не-ARC” кодом с ручным управлением памятью в одном и том же приложении.
Если вы работаете уже с существующей базой кода, изменение этой настройки может повлечь за собой громадное число ошибок. ARC не только управляет памятью вместо вас, но и запрещает вам делать это собственноручно.
немного противоречиво получается. все-таки как с этим реально обстоит дело?
Если вы работаете уже с существующей базой кода, изменение этой настройки может повлечь за собой громадное число ошибок. ARC не только управляет памятью вместо вас, но и запрещает вам делать это собственноручно.
немного противоречиво получается. все-таки как с этим реально обстоит дело?
0
Насчет существующей базы, думаю, следует понимать так: если вы сконвертили «олд скул» код под использование АПС, то из-за того, чтоб эффективно использовать память в вашем приложении и избежать утечек (впрочем, как говорит автор и я с ним согласен, в официальных фреймворках), вы должны использовать пресловутые retain/release/autorelease (см. п.1 и п.2 из правил в статье). Это неизбежно, если вы хотите, чтоб ваше приложение не текло. Сосуществование происходит в том случае, если у вас сбалансированы retain и release. В этом случае АПС нормально воспримет ваш код. :)
Это мое понимание вопроса.
Как на самом деле обстоит — в планах попробовать сконвертить «что-нить эдакое» на выходных, если будет возможность.
Это мое понимание вопроса.
Как на самом деле обстоит — в планах попробовать сконвертить «что-нить эдакое» на выходных, если будет возможность.
0
ARC-код может линковатся с не-ARC бибилотеками и наоборот. Но каждый отдельный Target в проекте должен быть либо ARC- либо не-ARC
0
Как я думаю, в общих чертах вы правы. Одно замечание: линковка будет нормальной ТОЛЬКО после того, как вы сконвертировали проект под АПС и включили ту самую опцию в настройках.
0
Не очень понял что вы имели ввиду. У нас есть свой проект, например игра и мы хотим использвать ARC. Есть cocos2d, который мы тоже хотим использовать, но который не поддерживает ARC. cocos2d подключается к проекту как статическая библиотека. В этом случае нам нет необходимости конвертировать cocos2d в ARC. Наш проект может использвать ARC, cocos2d будет использвать retain/release и оба они будут нормально линковатся друг с другом.
Если владеете английским, лучше посмотрите презентацию с WWDC «Introducing Automatic Reference Counting». Статья — ее вольный пересказ с кучей неточностей
Если владеете английским, лучше посмотрите презентацию с WWDC «Introducing Automatic Reference Counting». Статья — ее вольный пересказ с кучей неточностей
+1
arc можно выключать даже для отдельных файлов, поэтому вроде как все хорошо
+1
для тех, которые возможно читают этот тред, подробные инструкции со StackOverflow:
1) Зайти в Build Phases проекта;
2) Открыть Compile Sources (там будут только те исходники, которые используются для получения бинарников. Не удивляйтесь, если там не будет некоторых файлов, которые вы используете для либ);
3) Выделить файлы, в которых нужно использовать ARC. Кликнуть по ним, появится окошко, ввести туда "-fobj-arc"
1) Зайти в Build Phases проекта;
2) Открыть Compile Sources (там будут только те исходники, которые используются для получения бинарников. Не удивляйтесь, если там не будет некоторых файлов, которые вы используете для либ);
3) Выделить файлы, в которых нужно использовать ARC. Кликнуть по ним, появится окошко, ввести туда "-fobj-arc"
0
«прим. переводчика: Совершенно не понял смысл этого пассажа в контексте разбора ARC. Возможно, автор допустил опечатку, вместо zeroing weak references должно быть non-zeroing weak references»
Наверно имелось в виду что zeroing weak reference доступны только в IOS >=5 и MacOS >= 10.7,
а в предыдущих версиях weak останется тоже самое что assign.
Наверно имелось в виду что zeroing weak reference доступны только в IOS >=5 и MacOS >= 10.7,
а в предыдущих версиях weak останется тоже самое что assign.
0
С автоматическим удалением ivar'ов не все так просто и прозрачно в ARC для блоковых переменных.
если блок объявлен как:
то в деаллоке нужно будет сделать
если блок объявлен как:
@property( copy ) BlockType simpleBlock;
то в деаллоке нужно будет сделать
self.simpleBlock = nil;
руками иначе будет утечка.0
Упомяните, пожалуйста, ссылочки на блоги остальных разработчиков тоже.
+2
Automatic Reference Counting — www.mikeash.com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html
а вообще в презентации с WWDC неплохо все объяснили
а вообще в презентации с WWDC неплохо все объяснили
0
UFO just landed and posted this here
Sign up to leave a comment.
Automatic Reference Counting: часть 1