Почему Xcode 4.2 использует @autoreleasepool в main.m вместо NSAutoreleasePool? - PullRequest
13 голосов
/ 03 января 2012

Я заметил, что в Xcode 4.2 есть другой способ запустить основную функцию:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil,
                                 NSStringFromClass([PlistAppDelegate class]));
    }
}

и

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

Кто-нибудь знает разницу между этими двумя?

1 Ответ

14 голосов
/ 03 января 2012

Первый использует ARC, который реализован в iOS5 и выше для управления памятью.

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

Итак, прочитав немного о том, что нового в Obj-C с iOS5, выясняется, что:

@autoreleasepool {
    //some code
}

работает так же, как

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// some code
[pool release];

с той разницей, что последний выдаст ошибку на ARC.

EDIT

Первый использует ARC или нет.

...