Подтвердить что ты не робот

ARC, стоит того или нет?

Когда я перешел в Objective C (iOS) из С++ (и немного Java), мне было трудно понять управление памятью в iOS. Но теперь все это кажется естественным, и я знаю, как сохранить, авторейтинг, копировать и выпускать материал. Прочитав о ARC, я задаюсь вопросом, есть ли больше преимуществ использования ARC, или просто вам не нужно беспокоиться об управлении памятью. Прежде чем перейти в ARC, я хотел знать, как стоит переходить в ARC.

  • XCode имеет меню "Конвертировать в Objective C ARC". Является ли преобразование настолько простым (о чем не о чем беспокоиться)?
  • Помогает ли это мне в уменьшении памяти для печати приложений, утечек памяти и т.д. (как-то?)
  • Значительно ли это влияет на мои приложения?
  • Каковы неочевидные преимущества?
  • Любое Недостаток перехода к нему?
4b9b3361

Ответ 1

Вот мой конкретный подход к ARC:

1) XCode имеет меню "Преобразовать в Objective C ARC". Является ли преобразование таким простым (о чем не о чем беспокоиться)?

Это просто. Оно работает. Используй это. Как указывает Кевин Лоу, вам нужно будет пройти и исправить бит, где вы используете объекты Core Foundation. Это просто потребует здорового закрепления __bridge или __bridge_transfer, хотя.

2) Помогает ли это мне в уменьшении памяти для печати приложений, утечек памяти и т.д. (как-то?)

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

3) Значительно ли это влияет на мои приложения?

Ничего.

4) Каковы неочевидные преимущества?

Будущее. Будет больше, чтобы прийти на бонус, который дает компилятор, содержащий сложное знание того, как подсчитываются объекты. Например, ARC предоставляет прекрасную objc_retainAutoreleasedReturnValue, что очень приятно.

5) Любое неудобство или переход к нему?

Ничего.

Послушайте меня и начните использовать ARC. Там нет причин (ИМО), чтобы не было, таким образом, преимущества, безусловно, превышают недостатки!

Подробный взгляд на то, как работает ARC, возможно, поможет убедить вас в том, что это хорошо, пожалуйста, взгляните на мои сообщения в блоге под названием "Взгляд под капотом ARC" - здесь, здесь, здесь и здесь.

Ответ 2

Вот что вам действительно нужно знать о ARC:

Компилятор понимает Objective-C и Cocoa лучше вас. Я не имею в виду это как оскорбление; он понимает это лучше меня. Я думаю, вы можете смело сказать, что он понимает правила лучше, чем все, но, может быть, десяток человек во всем мире. И он знает трюки, чтобы использовать их до такой степени, что вы и я не можем повторять, даже если мы это понимаем так же хорошо, как и делаем.

Остальное - это просто детали:

  • Вы напишете гораздо менее скучный код. Код настолько скучно, что легко ошибаться.
  • В качестве смешанного времени компиляции и времени выполнения он имеет доступ к трюкам, которых у вас нет.
    • Лучше написать код управления памятью, чем вы можете, даже если вы напишете теоретический код управления идеальной памятью.
    • Это уменьшит использование памяти "прилива" (несколько) без каких-либо усилий с вашей стороны.
    • При обнулении слабых ссылок гораздо проще избежать сбоев, вызванных оборванными указателями.
  • Если вы запускаете новое приложение, перестаньте думать об этом и просто используйте его.
  • Если у вас есть существующее приложение:
    • Вам нужно будет повторно протестировать его. Вы должны убедиться, что у вас нет круглых ссылок.
    • Если у вас есть существующее приложение, которое предназначено для iOS перед iOS 5, обнуление слабых ссылок не поддерживается. Вам следует серьезно подумать о необходимости использования iOS 5.
    • Если у вас есть существующее приложение, предназначенное для iOS перед iOS 4, вы не можете использовать его вообще. Что вы думаете, поддерживая дерьмо, что старый?!?
  • В последней версии Xcode он не был полностью ошибкой. Вероятно, это еще не так. Но он все равно стоит использовать.

Ответ 3

  • Если вы используете код Core Foundation или не Objective-C, то это не так просто, как вам придется вручную пройти через ваш код и убедиться, что все трансляции между Objective-C и Core Foundation (если у вас есть какие-либо броски). Вам также все равно придется управлять памятью для кода Objective-C.

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

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

  • Не уверен, что они есть. В конце концов, все ARC - это автомат.

  • Вам нужно будет узнать о мостах, а также вы не сможете построить что-либо ниже, чем iOS 4.

В конце концов, это определенно стоит того. Сначала я был настроен скептически, но после просмотра видео WWDC, где они объясняют, как это работает, мне все больше нравилось.

Ответ 4

Вы читали документацию Apple по ARC? Он отвечает на многие вопросы, которые вы задаете.

Основываясь на моем опыте, вот что я думаю:

  • Да, это просто. Однако вам обязательно нужно протестировать приложение после конвертации.
  • Это может помочь уменьшить использование и утечки памяти приложения, но это не гарантирует этого.
  • Да. После конвертации в ARC вы захотите протестировать.
  • Вам не нужно тратить столько времени на размышления и отслеживание утечек. Вы можете потратить больше времени и энергии на свой фактический код приложения, а не беспокоиться о сохранении/выпуске. Даже если код сохранения/выпуска является естественным и легким для вас, вы не непогрешимы, и вы иногда можете забыть что-то выпустить. ARC не забывает.
  • Если вы поддерживаете iOS 4, вам придется обрабатывать слабые ссылки, поскольку ARC не поддерживает те, что в iOS 4.

Ответ 5

3) Вы должны повторно протестировать свои приложения, но по моему опыту это в значительной степени просто сработает. Посмотрите на все предупреждения компилятора очень осторожно, хотя!!!

4) Не очевидные преимущества: он действительно быстрее кодируется, когда вам не нужно думать об управлении памятью. Возможно, это очевидно, но количество, которое оно помогает, все еще удивляет меня.

5) Недостатки: на самом деле единственным недостатком является отключить ARC для некоторых сторонних библиотек.

ARC был настолько полезен, что я просто не буду кодировать его без него. Нет никаких оснований для того, чтобы иметь дело со всем этим, и на практике это работает достаточно хорошо.

Ответ 6

Смотрите видео WWDC на ARC: https://developer.apple.com/videos/wwdc/2011/?id=323

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

Ответ 7

Я обнаружил: ARC делает ваш код LOT быстрее. В видеороликах "Яблоки" WWDC говорится, что несколько циклов ЦП сохраняются для каждого метода сохранения и выпуска NSObject. Это связано с тем, что нет необходимости проверять его на время выполнения (теперь он передается компилятору). Это около 6 циклов процессора для каждого сохранения. Если вы используете цикл, который создает много объектов, то вы действительно можете почувствовать разницу.

ARC не только делает код быстрее, но вы пишете меньше кода, что резко ускоряет процесс разработки. И последнее, но не менее важное: вы не должны искать memoryleaks примерно на 90% от вашего кода. Если вы не используете много низкоуровневых материалов, которые должны использовать "__bridge casts", вы ПОЛНОСТЬЮ теряете память.

Заключение: если вы можете это сделать, сделайте это!