Поведение выпуска Objective-c NSMutableArray - PullRequest
4 голосов
/ 07 декабря 2010

Выпускает ли release рекурсивно все внутренние объекты?или это должно быть сделано вручную?

Могу ли я сделать это просто?

NSMutableArray *list = [[NSArray alloc] init];
// ...
// fill list with elements
//...
[list release];

Или я должен выпустить все внутренние объекты один за другим перед выпуском NSMutableArray?// Предположим, что нет никаких других ссылок на содержащиеся объекты, кроме самого списка.

Ответы [ 2 ]

4 голосов
/ 07 декабря 2010

Да, это так. Он сохраняет их при добавлении и освобождает их, когда dealloc'd. На самом деле это один из самых распространенных вопросов, которые я вижу здесь.

0 голосов
/ 07 декабря 2010

Если вы являетесь владельцем объекта, вам придется освободить его.

    NSMutableArray *list = [[NSArray alloc] init];

    NSString *str = [[NSString alloc] init] // you are the owner of this object
    [list addObject:str];
    [str release]; // release the object after using it
    [list release];

Если вы не являетесь владельцем объекта, вы не должны освобождать.

    NSMutableArray *list = [[NSArray alloc] init];

    NSString *str = [NSString string]; // you are not owning this object
    [list addObject:str]; // str retain count is incremented
    [list release];  // str retain count is decremented.

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

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