ARC - выделить в сильную собственность. Создает утечку? - PullRequest
14 голосов
/ 18 ноября 2011

В 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 правильно обработать верхний пример? Оптимизирует ли это одно из удержаний? Или, может быть, дважды выпустить в Deloloc?

1 Ответ

16 голосов
/ 18 ноября 2011

Это совершенно верно для ARC.

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

...