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

Objective-C ARC против MRR: почему переключатель?

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

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

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

Ник

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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


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

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

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

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

Ответ 3

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