Шрифт:
В следующей строке программы 2.1 вы указываете компилятору, что нужно найти и обработать файл с именем Foundation.h: #import <Foundation/Foundation.h>
Это системный файл. #import указывает, что нужно импортировать или включить в программу информацию из этого файла так, как если бы ввели ее в этом месте вручную. Импорт файла Foundation.h выполняется потому, что он содержит классы и функции, используемые в этой программе.
Следующая строка указывает, что программа имеет имя main: int main (int argc, const char *argv[])
Это специальное имя, которое указывает, где должно начаться выполнение программы. Зарезервированное слово int, которое поставлено перед main, ука-зывает тип значения, которое возвращает main — целое (более подробно об этом см. ниже). Между открывающей и закрывающей круглыми скобками находятся аргументы командной строки, которые мы будем рассматривать в главе 13.
Теперь, после идентификации main для системы, вы можете задать, какие действия выполняет программа. Для этого все программные операторы должны быть заключены в фигурные скобки. В самом простом случае оператор (statement) — это просто выражение, которое заканчивается символом «точка с запятой». Система интерпретирует все программные операторы между фигурными скобками как часть процедуры main. Программа 2.1 содержит четыре оператора. Первый оператор в программе 2.1 имеет следующий вид: NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Он резервирует пространство в памяти для автоматически высвобождаемого пула (autorelease pool). Мы опишем этот оператор в главе 17. Xcode помещает эту строку в вашу программу автоматически как часть соответствующего шаблона, поэтому не обращайте пока на это внимание.
Следующий оператор указывает, что должна быть вызвана (call) процедура NSLog. Параметр, или аргумент (argument), должен быть передан процедуре NSLog в виде следующей строки символов: @"Programming is fun!"
Здесь символ @ стоит непосредственно перед строкой символов, заключен-ной в кавычки. Все вместе это называется объектом-константой типа NSString.
Примечание. Если вы программировали на С, то вам может быть непонятен смысл символа-префикса @. Без этого символа вы получаете строку-константу в стиле С; с ним вы получаете объект-строку типа NSString.
Процедура NSLog — это функция библиотеки Objective-C, которая просто выводит на экран свой аргумент (или аргументы). Но прежде чем сделать это, она выводит дату и время выполнения процедуры, имя программы и некоторые другие числовые данные. В следующих главах мы не будем показывать текст, который вставляется функцией NSLog перед выходными результатами.
Вы должны заканчивать все операторы программы в Objective-C символом «точка с запятой» (;). Точка с запятой ставится непосредственно после закры-вающей круглой скобки при вызове NSLog. Прежде чем выполнить выход из про-граммы, вы должны освободить выделенный пул памяти (и связанные с ним объекты). Для этого вводится следующая строка: [pool drain];
В данном случае Xcode тоже автоматически вставляет в программу эту строку. Ее подробное описание будет приведено позже. Последний оператор программы в процедуре main имеет следующий вид: return 0;
С его помощью завершается выполнение main и возвращается (return) значе-ние состояния, равное 0, которое указывает на нормальное завершение про-граммы. Любое ненулевое значение обычно означает, что возникла проблема, например, программа не смогла найти нужный файл.
На рис. 2.8. в окне Debug Console после строки результатов NSLog было выве-дено следующее сообщение: The Debugger has exited with status 0. (Выход из отладчика со значением состояния 0)
Теперь вы понимаете, что означает это сообщение.
Теперь внесем в программу изменения. Пусть она выводит также фразу «And programming in Objective-C is even more fun!» (А программировать Objective-C еще интереснее!). Это можно сделать, добавив еще один вызов процедуры NSLog, как показано ниже в программе 2.2. Напомним, что каждый оператор программы на Objective-C должен заканчиваться символом «точка с запятой». #import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@"Programming is fun!"); NSLog (@"Programming in Objective-C is even more fun!"); [pool drain]; return 0; }
Если ввести программу 2.2 с последующей компиляцией и выполнением, то получится следующий вывод (мы опустили текст, который обычно выводится процедурой NSLog перед результатами программы): Programming is fun! Programming in Objective-C is even more fun!
Как можно видеть из следующего примера, вы не обязаны вызывать проце-дуру NSLog для каждой строки вывода.
Рассмотрим специальный набор из двух символов. Обратный слэш в соче-тании с буквой п используются как признак новой строки. Этот символ указывает системе, что нужно перейти на новую строку. Все символы, которые выводятся после символа новой строки, появятся в следующей строке вывода. Символ новой строки аналогичен клавише возврата каретки на пишущей машинке. Изучите листинг программы 2.3 и попытайтесь предсказать результаты, прежде чем посмотреть вывод этой программы. #import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@"Testing...\n..1\n...2\n....3H); [pool drain]; return 0; }