Да и нет:
Да, ARC избавляет вас от ручного вызова retain
, release
, autorelease
, возможно, позволяет удалить довольно много ваших dealloc
реализаций и - в новых средах выполнения - даже вводит обнуление слабых ссылок (w00t !), но это не предотвращает утечку, как таковую .
Это автоматическое сохранение / освобождение, а не сборщик мусора, поэтому он «позволяет» все еще пропускать память, создавая циклы сохранения.
Кроме того, он меняет ссылочную семантику атрибута __block
с weak
на strong
:
Каждый фрагмент кода, где вы избежали захвата self
с помощью __block id blockSelf = self;
, теперь является потенциальной утечкой - к счастью, Clang стал еще лучше предупреждать вас о подобных проблемах.
Область, в которой ARC фактически заставляет вас писать на больше кода, чем прежде, в большинстве случаев, когда вы используете бесплатное соединение между CFTypeRef
с и id <NSObject>
с:
Приведения должны быть аннотированы, чтобы сообщить ARC, что делать, иначе вы получите ошибку компилятора.
Если вы работаете с простыми API-интерфейсами CF, ничего не изменится: все остается ручным.
Один из лучших ресурсов по ARC, который я нашел, - это выступление Криса Паркера на WWDC о внутренностях ARC. Если вы еще этого не видели, вам определенно следует проверить это - общая часть ARC начинается примерно через 8 минут, а детали начинаются примерно через 29 минут.