действительно ли main.m - это место, где пул авто-релиза основного цикла запуска создается каждым событием? - PullRequest
2 голосов
/ 28 апреля 2009
#import <UIKit/UIKit.h>

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

Если это так, то функция main () должна вызываться при каждом событии, верно? Но я попробовал, и сообщение «новое событие ...» появляется только при запуске приложения. Поэтому я предполагаю, что в главном потоке должен быть еще один пул автоматического выпуска.

Ответы [ 2 ]

5 голосов
/ 28 апреля 2009

Нет. Все классы Cocoa или CocoaTouch требуют наличия пула автоматического выпуска, чтобы не допустить утечки памяти. Таким образом, существующий пул автоматического выпуска должен вызывать UIApplicationMain () для того, чтобы покрыть любые (возможно) автоматически выпущенные объекты, которые создаются в контексте UIApplicationMain (). Этот внешний пул автоматического выпуска, как вы можете видеть, опустошается после возврата UIApplicationMain, непосредственно перед выходом из приложения. Внутренний (помните, что пулы автоиздания могут быть вложенными и автоматически высвобождаемые объекты добавляются в самый новый / самый глубокий пул) пул автоиздания создается в начале каждой итерации цикла выполнения приложения и освобождается в конце итерации. Таким образом, каждая итерация цикла выполнения является «собственным» пулом автоматического выпуска. Если обработка события может генерировать много памяти с автоматическим выпуском (плохая идея на iPhone, но довольно распространенная на OS X), вы можете создать свои собственные внутренние пулы автоматического выпуска в коде обработки событий, который может быть освобожден во время обработки этого события. событие.

1 голос
/ 28 апреля 2009

Нет, это самая внешняя функция в вашем приложении, обычная функция main () в стиле C.

Все, что делает приложение iPhone, происходит в UIApplicationMain, включая всю обработку событий.

...