2010-12-07 4 views
4

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

Могу ли я сделать именно это?

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

+0

Я удалил свой ответ с февраля 2011 года, поскольку в нем содержится некорректная информация. В нем я сказал, что вам нужно использовать [x removeAllObjects], чтобы обеспечить выделение содержащихся объектов. Это похоже на правду: если вы создали NSMutableArray, используя [[NSMutableArray alloc] init], это, конечно, не так. Чтобы гарантировать, что содержащиеся объекты в AUTORELEASED NSMutableArray будут удалены и отправлены релиз, когда вы закончите с ним, а не когда массив будет выпущен пулом, он применим. помимо наивности, что меня отбросило, так это то, что над кодом фактически выводится NSArray в NSMutableArray. – unsynchronized 2011-11-18 21:10:43

ответ

4

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

+0

Я только что начал с объектива-c tks :) – fmsf 2010-12-07 11:36:43

0

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

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. 

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

Смежные вопросы