ARC - распределение в сильное свойство. Создает утечку?

В ARC создается ли утечка памяти в alloc в @property (strong)

// MyClass.h
@property (strong) NSString *myString;

// MyClass.m
@synthesize myString=_myString;

- (void)viewDidLoad
{
    self.myString = [[NSString alloc] initWithFormat:@"Test %@", otherString];
}

Я знаю, что в ручном управлении памятью эквивалент создаст утечку

// MyClass.h
@property (retain) NSString *myString;

// MyClass.m
@synthesize myString=_myString;

- (void)viewDidLoad
{
    self.myString = [[NSString alloc] initWithFormat:@"Test %@", otherString];
}

- (void)dealloc
{
    [_myString release];
}

Может ли ARC правильно обрабатывать верхний пример? Оптимизирует ли он один из сохранений? Или, может быть, выпустить два раза в dealloc?

Ответы

Ответ 1

Это абсолютно справедливо в ARC.

Я бы порекомендовал прочитать документацию ARC, чтобы получить более удобное доверие к тому, что она может предложить. http://clang.llvm.org/docs/AutomaticReferenceCounting.html, и Майк Эш имеет отличное сообщение в блоге о том, как он работает http://www.mikeash.com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html