Objective-C ARC против MRR: почему переключатель?
Я новый разработчик cocoa, исходящий из фона С#/Java. Я познакомился с шаблонами управления памятью, которые использует язык objective-c, и я просто считаю их очень полезными для разработки кода.
Почему Apple теперь хочет, чтобы мы использовали ARC (автоматический подсчет ссылок) вместо MRR (Manual Retain-Release) и какие преимущества, кроме экономии времени, предлагает ARC?
Я вижу такой переход, отрицательно влияющий на привычки хорошего гражданина, которые разработчики получают от экосистемы obj-c.
Ник
Ответы
Ответ 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), где вам все еще нужно иметь в виду, кто владеет тем, что.