NSMutableArray рекурсивен в выпуске своих предметов? - PullRequest
1 голос
/ 04 января 2011

Если у меня есть 2-мерный NSMutableArray, например,

board = [[NSMutableArray alloc] initWithCapacity:boardHeight];
for (int y = 0; y < boardHeight; y++) {
    NSMutableArray *row = [[NSMutableArray alloc] initWithCapacity:boardWidth];

    for (int x = 0; x < boardWidth; x++) {
        [row insertObject:@"A string"];             
    }

    [board insertObject:row atIndex:y];
    [row release];
}

и я делаю

[board release];

Это рекурсивно освобождает массив?Или мне нужно вручную войти в массив и освободить каждую строку?

Если это так, и объект, вставленный в каждую строку, был пользовательским, есть ли что-то особенное, о чем я должен думать при написании dealloc?метод для пользовательского объекта?

Ответы [ 2 ]

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

Все будет работать нормально.Массив сохранит объекты при их добавлении и освобождении при удалении или освобождении массива.

Никаких дополнительных действий с этой частью.

1 голос
/ 04 января 2011

Когда board готов к освобождению, он отправит сообщение release каждому объекту в себе. Даже если эти объекты NSArray s, они все равно будут release d; и если эти массивы теперь готовы к освобождению, они отправят release своим членам и т. д.

Ваш класс должен реализовывать dealloc обычно - release любые ивары, на которые вы строго ссылаетесь перед вызовом [super dealloc].

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