Начиная с Objective-C: в ARC или не в ARC? - PullRequest
9 голосов
/ 17 декабря 2011

Согласно Документации Apple по ARC , существует довольно значительное количество изменений в способе разработки программного обеспечения при использовании ARC.

Как полному новичку в Objective-C, было бы лучше начать с отключенной ARC, думая, что это даст мне лучшее понимание на низком уровне того, что происходит за кулисами? Или ARC по существу отверг «старый способ» ведения дел до такой степени, что не стоит тратить время на изучение?

Ответы [ 5 ]

11 голосов
/ 17 декабря 2011

Это в основном вопрос мнения, и поэтому он довольно опасен.

Мое мнение квалифицированное да.Стоит изучить основы управления памятью.Квалификация не увязает в этом.Узнайте, что ARC делает для вас под капотом, с помощью нескольких очень простых проектов.Если у вас есть базовое понимание того, как обращаться с управлением памятью, то есть как избежать сохранения циклов (как уже упоминалось, у джеммонов могут возникнуть проблемы с ARC).После того, как вы освоили управление памятью.Начните использовать ARC.

Также, как отметил Джейсон Коко, ARC управляет памятью (проще говоря) для подклассов NSObject.Таким образом, со всеми объектами CF вы все равно будете обращаться сами, если вам нужно их использовать.

Отличное объяснение того, что ARC делает для вас под капотом, можно найти в сеансе 323 WWDC2011 - Представление автоматическогоПодсчет ссылок.

Но есть и другие соображения, которые могут повлиять на ваше решение.

На какие устройства вам нужно ориентироваться?

Если вы планируетенацеленный на iOS 4.3 и выше ARC эффективно обрабатывает управление памятью для вас (из подклассов NSObject)

Если вы планируете ориентироваться на iOS 4.2, то вы не сможете использовать ссылки weak (вы будете использовать unsafe_unretained),iPhone 3g?& iPod touch 2-го поколения застрял на этом уровне ОС, потому что многие из этих устройств все еще находятся в эксплуатации, и многие разработчики все еще нацелены на них.

Если вы планируете нацелиться на iOS с ранее, чем 4.2 (Это будетбыть редким) вам обязательно нужно изучить MRC (ручной подсчет ссылок).

Если вы планируете создавать приложения Mac, на этой платформе доступен сборщик мусора.ARC также является опцией (полная ARC 10.7, без слабой поддержки 10.6).

7 голосов
/ 17 декабря 2011

Стоит отметить, что ARC проверяется по умолчанию при запуске нового проекта в XCode. Это такой же хороший знак, как и любой другой, что старый retain / release способ делать вещи устарел, и Apple видит в ARC будущее. Ваш первый урок в качестве нового разработчика ObjC может заключаться в том, что он никогда не платит против Apple.

Кроме того, хотя довольно просто конвертировать старые retain / release сэмплы в ARC (по большей части просто отбросьте любые retain s, release s и autorelease s), обратное неправда. И я уже видел много примеров кода, написанного в стиле ARC. Так что, если кто-то только начинает, он будет платить больше, чтобы выучить ARC.

Обратите внимание, это не означает, что вам не нужно понимать подсчет ссылок. Это все еще важная часть жизненного цикла объекта, и вам все равно нужно знать о таких вещах (хотя бы знать, когда использовать ссылки weak или strong). Но когда приходит время писать код, пишите его с ARC.

4 голосов
/ 17 декабря 2011

Apple сама рекомендует ARC для новых проектов.http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i

прочитайте пункт 2 в кратком обзоре

В Objective C и iOS намного интереснее изучать, кроме управления памятью.Мой совет: не беспокойтесь о MRR

4 голосов
/ 17 декабря 2011

«Старый» стиль - это просто подсчет ссылок для управления временем жизни вашего объекта. На самом деле это не так уж и много, но оно может быть подвержено ошибкам и вызывать всевозможные страдания. Если вы только начинаете, я бы лично предложил вам просто научиться программировать с использованием ARC. Вы по-прежнему будете иметь дело с подсчетом ссылок, когда вам нужно использовать объекты библиотеки C, такие как CoreFoundation или CoreGraphics.

0 голосов
/ 18 февраля 2013

Было бы хорошей идеей просто пройтись по ней и понять, что происходит, но для разработки это не существенно, и, как вы можете видеть большинство, если не все разработчики перенесли свои цели развертывания на iOS 5.0+, то есть скорее всего, не будет развиваться при ручном подсчете ссылок.

Однако, если вы планируете использовать не ROP-удерживаемые указатели объектов- в вашем коде, такие как CFStringRef, вы можете по-настоящему взглянуть на не ARC, чтобы вы могли понимать такие вещи, как bridge, потому что вы можете объединить код ARC и код не ARC в одном проект.

...