Объектив-C ARC против MRR: почему переключатель? - PullRequest
12 голосов
/ 19 декабря 2011

Я новый разработчик какао из C # / Java. Я познакомился с шаблонами управления памятью, которые использует язык target-c, и я просто нахожу их очень полезными для сознательной разработки кода.

Почему Apple теперь хочет, чтобы мы использовали ARC (автоматический подсчет ссылок) вместо MRR (сохранение вручную) и какие преимущества дает ARC, кроме экономии времени?

Я вижу такой переход, отрицательно влияющий на привычки добропорядочных граждан, который разработчики получают из экосистемы obj-c.

Ник

Ответы [ 3 ]

12 голосов
/ 19 декабря 2011

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

ARC - это менее простителен, чем коллектор трассировки, такой как C # или Java.Если у вас нет четкой модели владения объектами, вы почти наверняка создадите циклы и потеряете тонны памяти.Я надеюсь, что это станет достаточно очевидным (с помощью инструментов? Это все еще требует поиска ... не уверен, что можно сделать здесь), чтобы новые разработчики быстро научились сохранять свой объектный граф ясным и ациклическим.

9 голосов
/ 19 декабря 2011

ARC позволяет мне сосредоточиться на написании полезного кода вместо стандартных методов dealloc.

Большинство людей, которых я знаю, в любом случае использовали autorelease за каждым alloc, потому что это спасло вас release позже, и вы не могли забыть на самом деле поставить его. Таким образом, объект был рядом до тех пор, пока не был истощен пул авто-релиза, а с ARC объект освобождается, когда он больше не нужен. Я думаю, что в этих случаях ARC-скомпилированная программа будет использовать меньше памяти.

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


Я вижу такой переход, отрицательно влияющий на привычки добропорядочных граждан, который разработчики получают от экосистемы obj-c.

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

По моему мнению, обсуждение MRR vs ARC похоже.
ARC и C позволяют писать более удобный код за более короткое время. И оба они могут привести к увеличению памяти и процессоров.
Если я правильно помню, Apple объявила, что они добавили небольшую скорость до retain и release, чтобы компенсировать это влияние на использование процессора. И из-за этого нет никакой реальной причины, что MMR все еще существует.

Я, например, приветствую наших новых повелителей ARC.

2 голосов
/ 23 декабря 2011

Я действительно с удовольствием перешел в ARC - об этом меньше думать.вдобавок ко всему, я думаю, что новички часто бывают сбиты с толку важностью соглашений об именах (+ alloc, -copy и т. д. против [NSString stringWith ....]).единственный сложный момент - это когда вы начинаете работать с CoreFoundation и т. д. (API C), где вам все еще нужно помнить, кому что принадлежит.

...