Под капотом iOS 5 по-прежнему выполняет управление памятью, используя счетчики сохранения и освобождение объектов, когда на них больше нет ссылок. До ARC управление памятью в iOS полагалось исключительно на программиста, чтобы охватить все возможности времени выполнения (несчастный). В других средах, таких как .NET и OS X, периодически устанавливается нулевое число объектов, на которые нет ссылок. Эта система «сборки мусора» во время выполнения непредсказуемо замедляет выполнение. ARC уникален тем, что, насколько мне известно, это первое решение для управления памятью, которое полностью выполняется путем статического анализа всех возможных путей выполнения с использованием компилятора (замечательно).
По сути, компилятор прозрачно вставляет операторы release
, retain
или autorelease
по своему усмотрению. Теоретически, объект, созданный фабричным методом, таким как [NSString stringWithString]
, будет иметь ту же жизнь, что и объект, созданный [[NSString alloc] initWithString]
. Кто-нибудь знает, если компилятор LLVM трактует alloc
'ed объект по-другому?