NSMutableArray Управление памятью при прямом выделении - PullRequest
2 голосов
/ 04 ноября 2011

Я знаю, что когда мы добавляем объект obj в NSMutableArray, он принимает co_ownership этого объекта.Таким образом, мы можем освободить объект obj сразу после добавления его в NSMutableArray.И когда мы выпускаем NSMutableArray, он также вызывает освобождение всех объектов в нем.Таким образом, нет утечки памяти, и все в порядке.

Я сомневаюсь, что если действительно как

NSMutableArray myArray = [[NMutableArray alloc] init];
[myArray addObject:[MyClass alloc] init]];
[myArray release];

Будет ли это причиной утечки памяти в нашей программе?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

Да, действительно, это приведет к утечке памяти.

Линия нарушения (я разделил ее для ясности):

[myArray addObject:
    [[MyClass alloc] init] // <- An instance is allocated with ownership
]; // <- The array retains the instance

В конце удержаниеВладение / release не сбалансировано и вызывает утечку.

Одним из решений является распределение до добавления:

MyClass *obj = [MyClass alloc] init];
[[myArray addObject:obj];
[obj release];
3 голосов
/ 04 ноября 2011

Положите autorelease для вашего MyClass. Это должно исправить любые утечки памяти

NSMutableArray myArray = [[NMutableArray alloc] init];
[myArray addObject:[[[MyClass alloc] init] autorelease];
[myArray release];
...