Подтвердить что ты не робот

Почему Xcode 4.2 использует @autoreleasepool в main.m вместо NSAutoreleasePool?

Я заметил, что в 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;
}

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

4b9b3361

Ответ 1

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

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

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

@autoreleasepool {
    //some code
}

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

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

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

ИЗМЕНИТЬ

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