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

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;
}

Любое понимание будет оценено по достоинству.

4b9b3361

Ответ 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 активируется при первом создании нового проекта. Правильно знаю единственный способ, которым я знаю, как включить или не включить его, когда вы сначала создаете свою программу. Это один из флажков, которые вы должны отменить.