12

Я новый разработчик какао, идущий с фона C#/Java. Я познакомился с шаблонами управления памятью, которые использует язык объектно-ориентированного языка, и я просто считаю их очень полезными для разработки кода.Objective-C ARC против MRR: почему переключатель?

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

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

Ник

+1

Благодаря @pst для редактирования. Это был мой первый пост, и я забыл дополнительно объяснить новые акронимы. –

ответ

12

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

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

+3

Спасибо @Catfish_Man, я предпочел бы, чтобы ARC больше напоминал систему предупреждения компилятора, поддерживаемую статическим анализатором. –

+0

@ NicholasE.Credli: Это строгое намерение: большинство правил ARC подтверждается принципом, согласно которому компилятор должен быть прав в 100% случаев, поэтому, когда вы бросаете ему случай, который неоднозначен, он не догадается, что вы но просто выкидывают ошибку. Решение состоит в том, чтобы сделать ваш код однозначным. –

9

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

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

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


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

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

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

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

2

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

Смежные вопросы