Новичок: разница между Xcode 3 и Xcode 4, в частности, NSfunctions

#objective-c #xcode4 #nslog #nsautoreleasepool

#objective-c #xcode4 #nslog #nsautoreleasepool

Вопрос:

Я изучаю objc и Xcode из удобной бесплатной электронной книги под названием «Как стать» и Xcoder, что довольно удобно. За исключением того, что он был написан в 2007 году с помощью Xcode 3, и все его образцы взяты из этой версии, к сожалению, у меня OSX Lion и, следовательно, Xcode 4. Итак, к сути моего вопроса. Они предоставляют примерный блок кода, как показано здесь:

 //start
#import <Foundation/Foundation.h
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
//end
 

Итак, мои проблемы в том, что я получаю более 20 ошибок, а Xcode не распознает команды NSAutoreleasePool или NSLog.
Кто-нибудь знает, почему это не сработает? Я уже добавил Foundation framework.
Я уже понял, что команда printf работает лучше, чем команда NSLog (которая, насколько мне известно, в большей степени используется для отчетов об ошибках), так что да, любая помощь была бы приятной.

Комментарии:

1. Вам не хватает окончания ‘>’ при импорте foundation, это также может быть причиной проблемы: #import <Foundation/Foundation.h>

2. Вы также путаете IDE (Xcode) с API (Cocoa).

Ответ №1:

Если NSLog не распознается, это не проблема, связанная с Xcode 3 и Xcode 4. Ваш код не включает в себя самый базовый код среды выполнения Objective-C. Я бы предположил, что он компилируется как C, а не Objective-C.

Вы говорите, что вам пришлось добавить Foundation framework — это указывает на то, что вы не запускали свой проект с использованием шаблона на основе Objective C. Когда вы выбираете Новый проект …, какой шаблон вы выбрали? Любой из шаблонов приложений iOS должен работать, и большинство шаблонов приложений Mac OS X должны работать. Если вы решили создать инструмент командной строки, вы должны выбрать Foundation в качестве типа.

Редактировать: Также я должен добавить, что синтаксис для пулов автоматического выпуска изменился в последней версии Xcode, поскольку ARC используется по умолчанию. Вы можете либо отключить ARC, либо прочитать об этом, чтобы увидеть, в чем различия. Скорее всего, с ARC вам будет проще, поскольку вам придется беспокоиться о меньшем управлении памятью, но вам придется иметь это в виду, если вы читаете книгу, в которой это не учитывается.

Комментарии:

1. Спасибо, я выбрал инструмент командной строки, но я не мог видеть, где выбрать foundation в качестве типа. Я пойду посмотрю еще раз. В моем руководстве, как я уже сказал, показано, как это сделать в Xcode 3, но когда я смотрю на меню выбора шаблона, оно совершенно другое. Спасибо за помощь, хотя я пойду исследовать ARC, хотя это звучит довольно полезно.

Ответ №2:

Основа расположена на экране, где вам нужно дать название вашему проекту. В качестве значения по умолчанию установлено значение C, в вашем случае вам нужно нажать на выпадающее меню и вместо этого выбрать Foundation.

Удачи.