2011-02-09 3 views
9
#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

Основной метод вызывает выпуск в пуле после выхода приложения, который, кстати, отправляет освобождение всем объектам в пуле. Но поскольку автореализованные объекты, созданные внутри приложения, не прилипают до тех пор, пока приложение не выйдет, в какой-то момент во время runloop пул либо сливается, либо освобождается (в контексте iPhone, дренаж == release .., если мне не нужно исправлено по этому вопросу!). Но знает ли кто-нибудь наверняка, когда это произойдет? Казалось бы логичным, чтобы пул был исчерпан в конце runloop, и новый, который будет выделен в начале следующего, но я не могу найти окончательной информации об этом. Here's a discussion на яблоневых форумах, но это кажется весьма спекулятивным (не говоря уже спорным, к концу). Может ли кто-нибудь дать мне ответ, в идеале, с документами или исходным кодом (или даже экспериментальной программой)?Когда главный пул Autorelease в какао-прикосновении сливается?

+0

конкретный пул, который вы ссылаетесь, не сливается до конца приложения, но каждый вызов цикла запуска создает свой собственный пул, вложенный в цикл выполнения приложения. – cobbal

+0

Это имеет смысл. Итак, если я никогда не создаю свой собственный пул, у определенного приложения по умолчанию будет два вложенных пула? – jakev

+0

Yup; внешний пул и велосипедный пул в пределах цикла запуска. UIApplicationMain() может создавать и сливать пулы в качестве детали реализации. – bbum

ответ

11

От NSAutoreleasePool Class Reference:

Комплект приложений создает autorelease пул на главном потоке в начале каждого цикла цикла событий, и стекает его в конце, таким образом, освобождая любые autoreleased объекты генерируются при обработке мероприятие.

+0

как я пропустил это? спасибо ... – jakev

+0

В случае каких-либо сомнений, как версия OS X, так и версия iOS в документации NSAutoreleasePool содержат этот оператор, поэтому, по-видимому, это верно на обеих платформах. – Sandy

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

  • Нет связанных вопросов^_^