IPhone NSMutableArray управление памятью - PullRequest
1 голос
/ 24 октября 2010

Будучи нубом в Iphone dev, просто пытаюсь понять.

В коде ниже, что происходит точно?

City *newCity = [[City alloc] init];
newCity.name = @"name";

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:newCity];

City *getCity = [array objectAtIndex:0];

[city release];
[array release];

Когда вы добавляете объект в массив, массив сохраняет или создает новый экземпляр?

Также, когда я делаю objectAtIndex, чтобы получить город. Я предполагаю выпустить это? Я предполагаю, что нет, так как мне не принадлежит это? Это то, как я должен думать?

Кроме того, когда я выполняю освобождение массива, он выполняет итерацию по всему объекту в массиве и также вызывает выпуск этих объектов?

Ответы [ 2 ]

3 голосов
/ 24 октября 2010

Все ваши предположения верны.

Если вы думаете с точки зрения собственности, вы всегда будете правы (кроме некоторых хорошо документированных исключений).

City *newCity = [[City alloc] init]; //newCity is +1
newCity.name = @"name"; //name +1

NSMutableArray *array = [[NSMutableArray alloc] init]; //array +1
[array addObject:newCity]; //new city +1

City *getCity = [array objectAtIndex:0]; //no memory change

[city release]; //assuming this was supposed to be newCity, newCity -1,
[array release]; //array -1, array deallocs, calling release on all its objects, newCity -1, deallocs
1 голос
/ 24 октября 2010

Когда вы добавляете объект в массив, массив сохраняет объект.

И вы правы, что если вы используете - [NSArray objectAtIndex: idx], то счетчик сохранения не увеличивается, вы не «владеете» полученным объектом и вам не нужно его освобождать. Если, конечно, вы решили сохранить его после того, как получили его из массива.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...