Почему ARC работает только для iOS 4.0+? - PullRequest
9 голосов
/ 06 марта 2012

Какова техническая причина поддержки ARC только iOS 4.0 и выше?

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

Как таковое, оно не должно включать функции, которые не присутствовали в предыдущих версияхiOS, и, действительно, ARC действительно работает с iOS 4.0, несмотря на то, что он был представлен позже.

Я задаю этот вопрос из любопытства и на самом деле не нужно заставлять ARC работать с iOS 3.x.

Ответы [ 4 ]

16 голосов
/ 14 марта 2012

По той же причине автоматический подсчет ссылок поддерживает только 64-битный Snow Leopard в качестве минимальной цели развертывания: поддержка ARC требует определенных функций, присутствующих только в достаточно новой версии современной среды выполнения. Эта современная среда выполнения была представлена ​​в iOS 4.0, поэтому в старых версиях iOS отсутствует среда выполнения, способная обрабатывать некоторые вещи, которые технически требуются ARC. Если бы это было просто связано с версиями ОС, 32-битные приложения Snow Leopard также были бы поддержаны, но только 64-битная среда выполнения является современной.

Если вы посмотрите презентации Apple от WWDC 2011 , в частности, «Углубленное продвижение Objective-C», вы увидите, что для ускорения был сделан ряд внутренних улучшений. процесс сохранения / освобождения, а также такие вещи, как более быстрый @autoreleasepool. В спецификации LLVM ARC есть целый раздел о поддержке во время выполнения. Эти улучшения требуют не только поддержки компилятора.

Нам уже приходилось использовать современную среду выполнения для таких функций, как автоматический синтез переменных экземпляра (как описано в документации Apple ), так что это не страшный сюрприз.

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

4 голосов
/ 06 марта 2012

В документах Apple указано, что в случае ARC цепочка де-лок, связанная с супер, обрабатывается во время выполнения.

2 голосов
/ 06 марта 2012

Такой же вопрос будет:

Почему NSRegularExpression поддерживается только iOS 4.0+ и Mac OS X 10.7 (Lion) +?

У вас есть полностью работающие симуляторы iOS 5.0 (и, очевидно, 4.0) в Mac OS X 10.6.7 (Snow Leopard), где вы можете легко использовать NSRegularExpression, но он не поддерживается самой Mac OS X 10.6.7.

А по поводу вашего вопроса: ARC был представлен с iOS 5.0.В то время пользователей iOS 3.x больше не было, поэтому я считаю, что Apple немного ленива, чтобы сделать ARC совместимым с iOS 3.x.

1 голос
/ 06 марта 2012

Я думаю, что цепочка инструментов clang (требуется для ARC) не создает двоичные файлы, совместимые с iOS 3.x.

Кроме того, вместо отправки -retain и -release есть несколько функций C, которые могут быть недоступны в iOS 3.x

http://www.informit.com/articles/article.aspx?p=1745876

...