Ошибка компилятора XCode 4.2 - PullRequest
2 голосов
/ 17 июня 2011

Когда я создаю новый проект с XCode 4.2 (например, приложение Single View для iOS), файл main.m в папке «Supporting Files» выглядит следующим образом:

#import <UIKit/UIKit.h>
#import "iiiAppDelegate.h"

int main(int argc, char *argv[])
{
    int retVal = 0;
    @autoreleasepool {
    retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([iiiAppDelegate class]));
    }

    return retVal;
}

Параметром компилятора (в настройках сборки) является Apple 3.0 LLVM. Когда я изменяю его на GCC 4.2 или GCC4.2 LLVM, он показывает ошибки с main.m.

Нет @autoreleasepool ...

Какие настройки в моем XCode могут вызвать такие проблемы? Почему стандартный компилятор для новых проектов Apple 3.0LLVM вместо системного компилятора по умолчанию (GCC4.2) ??

Ответы [ 2 ]

6 голосов
/ 31 октября 2011

Чтобы ответить на ваш первый вопрос:

Какие настройки в моем Xcode могут вызвать такие проблемы?

Сам компилятор является настройкой.Измените его на LLVM 3.0 и больше никаких проблем

Чтобы ответить на ваш второй вопрос:

Почему стандартный компилятор для новых проектов Apple 3.0LLVM вместо системного компилятора по умолчанию (GCC4.2) ??

LLVM 3.0 IS системный компилятор по умолчанию для Xcode 4.2.

Я думаю, что вы на самом деле спрашивает, как исправить ошибку, когда не используется LLVM 3.0.Для этого вам нужно заменить @autoreleasepool на NSAutoreleasePool примерно так:

int main(int argc, char *argv[]) {
    int retVal = 0;

    // @autoreleasepool {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([iiiAppDelegate class]));

    [pool drain];
    // }

    return retVal;
}
3 голосов
/ 17 июня 2011

@autoreleasepool - это новая функция, добавленная в LLVM 3.0. Он просто не может работать с другими компиляторами, которые вы пробовали.

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