Автоматический подсчет ссылок (ARC)

Cocoa

Автоматический подсчет ссылок (Automatic Reference Counting (ARC)) является компиляторной функцией, которая обеспечивает автоматическое управление памятью в Objective-C объектах. Вместо того, чтобы думать о сохранении и освобождении объектов, ARC позволяет сосредоточиться на непосредственном коде Вашего приложения.

ARC работает путем добавления кода во время компиляции, чтобы время жизни объекта было ровно столько, сколько необходимо, но не более того. Концептуально, это то же управление памятью, что и ручной подсчет ссылок (описанное в практическом управлении памятью) путем добавления соответствующего кода управления памятью, за вас.

ARC поддерживается начиная с Xcode 4.2 для Mac OS X v10.6 и v10.7 (64-bit applications), а также iOS 4 и iOS 5. Слабые (weak) ссылки не поддерживаются в Mac OS X v10.6 и iOS 4 и более ранних.

ARC

Кроме того, что ARC вставляет в код за Вас retain/release/autorelease, он так-же автоматически создает заполненный метод dealloc, если Вам необходимо освободить объекты, используемые извне и не использующие ARC, вы можете по прежнему написать свой метод dealloc, но в конце метода не надо писать [super dealloc] ARC это сделает за Вас.

Простой пример кода с использованием ARC, позволяющий сосредоточиться на коде, а не на контроле ссылок.

- (void)test1
{
  NSNumber *year = [NSNumber numberWithInteger:2012];
  NSNumber *day = [NSNumber numberWithInteger:1];
  NSString *month = @"май";
  NSArray* arrDate = [NSArray arrayWithObjects:day,month,year, nil];
  NSLog(@"Месяц:  %@", [arrDate objectAtIndex:1]);
}

Здесь year, day, month - являются строгими ссылками на объекты, которые мы добавляем в массив arrDate, соответственно ARC вставляет retain к каждой добавленной к массиву ссылке, в конце метода нам нет необходимости освобожать выделенную память под массив и объекты, т.к. ARC все сделает за нас во время компиляции.

ARC представляет новые критерии жизни объекта

ARC вводит несколько новых критериев жизни объектов, и слабые (weak) ссылки. Слабая ссылка не продливает срок жизни объекта на который она указывает, и автоматически становится нулевой, когда нет более сильных (strong) ссылок на объект.

Важно: ARC не решает проблему циклических сильных ссылок, описанную в "Практическое управление памятью".

Квалификаторы переменных

  • __strong - по умолчанию. Объект остается "живым", если на него есть сильный указатель.
  • __weak - указывается (слабая) ссылка, которая не сохраняет указанный объект живым. Слабая ссылка устанавливается ​​в nil, когда на объект нет сильных ссылок.
  • __unsafe_unretained - указывается ссылка, которая не сохраняет указанный объект живым и не устанавливается ​​в nil, когда нет сильных ссылок на объект. Если объект, на который она ссылается, будет освобожден, то указатель остается болтаться со значением, которого уже нет.
  • __autoreleasing - используется для обозначения аргументов, которые передаются по ссылке (id *) и autoreleased по возвращении.

Будьте осторожны с применением __weak слабых ссылок, так, если Вы создадите объект только со слабой ссылкой, то нет никакой гарантии, что он доживет до своего применения и не освободится.

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac