NSAutoreleasePool недоступен
Я следую "Программирование в Objective-C" 3 rd и у меня возникают проблемы с первым примером.
Я продолжаю получать эту ошибку:
Семантический выпуск: "NSAutoreleasePool" недоступен: недоступен в автоматический режим подсчета ссылок
Вот мой код:
//
// main.m
// prog1 //
// Created by Steve Kochan on 1/30/11.
// Copyright 2011 ClassroomM, Inc.. All rights reserved. //
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"Programming is fun!");
[pool drain];
return 0;
}
Любое понимание будет оценено по достоинству.
Ответы
Ответ 1
В компиляторе попросят скомпилировать файл с включенным ARC (автоматическим подсчетом ссылок). Отключите это или, еще лучше, обновите свой пример:
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSLog (@"Programming is fun!");
}
return 0;
}
(Нет, я не могу сказать, как, в частности, отключить ARC, если это был маршрут, по которому вы должны были уйти из-за вышеупомянутого NDA.)
Ответ 2
Быстрый пост на всякий случай, если вы все еще ищете
Вы можете отключить ARC в настройках сборки.
- Нажмите на проект, в организаторе левой руки.
- Выберите свою цель в следующем столбце.
- Выберите вкладку "Настройки сборки" вверху.
- Прокрутите вниз до "Objective-C Автоматический подсчет ссылок" (это может быть
перечисленные как "CLANG_ENABLE_OBJC_ARC" в пользовательских настройках
группа), (если вы не найдете опции ARC в настройках сборки, вам может понадобиться
для переключения вашего компилятора. Вы можете найти его в настройках сборки)
- и установите значение НЕТ.
Ответ 3
В моем случае, я хотел ARC и хотел обновить образец проекта для правильной работы. Документы Apple NSAutoReleasePool являются технически правильными, но не выходят прямо и объясняют это. Вот как:
Возьмите основное приложение, которое, вероятно, выглядит примерно так:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([DemoAppDelegate class]));
[pool release];
return retVal;
}
И измените его так:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([DemoAppDelegate class]));
}
}
Ответ 4
Вот ссылка в руководство перехода Apple к ARC.
ОК... проверьте этот. Конкретное изменение в NSAutoreleasePool - это то, как Xcode инициализирует себя при создании вашего первого приложения. Я не знаю о вас, но мне нравится эта идея!
Не беспокойтесь, если вы следите за книгой Кочана. При запуске проекта просто снимите флажок "Использовать ARC". Все будет работать.
Ответ 5
ARC активируется при первом создании нового проекта. Правильно знаю единственный способ, которым я знаю, как включить или не включить его, когда вы сначала создаете свою программу. Это один из флажков, которые вы должны отменить.