Как объекты в пулах автоматического выпуска обрабатываются в Objective-C? - PullRequest
1 голос
/ 08 июля 2010

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

int main(void) { 
    NSAutoreleasePool *pool; 
    pool = [[NSAutoreleasePool alloc] init]; 
    NSString *string; 
    NSArray * array;
    string = [[[NSString alloc] init] autorelease]; 
    array = [[NSArray alloc] init];
    /* use the string */ 
    [pool drain]; 
} 

В этом случае в пул добавляется только строкаили даже массив добавлен в пул?

Ответы [ 2 ]

0 голосов
/ 08 июля 2010

Объекты добавляются в пул автоматического выпуска только при отправке методом автоматического выпуска.

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

Однако сами пулы автоматического выпуска эффективноследующий пул вниз по стеку.Таким образом, если вы сливаете самый старый пул, все пулы, созданные с тех пор, также будут слиты.Это важно в контексте создания исключений.Это позволяет генерировать исключение через фрейм стека с пулом автоматического выпуска, не пропуская пул или объекты в нем.

0 голосов
/ 08 июля 2010

Объекты добавляются в пулы с автоматическим выпуском (да, пулы, их количество в потоке), когда к ним вызывается -autorelease и только тогда. Однако в методах, которые не содержат слов «new», «alloc» или «copy» (более или менее, я мог бы забыть один или два), возвращаемое значение обычно автоматически высвобождается для вас, прежде чем оно будет возвращено , Вы действительно должны прочитать руководство по управлению памятью полностью (это не , что болезненно).

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