Программирование на Objective-C 2.0
Шрифт:
Написание и отладка программ Objective-C из среды Terminal — вполне до-пустимый, но стратегически ошибочный подход. Приложения Mac OS X или iPhone — это не просто исполняемый файл, который должен быть «упакован» в пакет приложения. Создать такие приложения из приложения Terminal очень нелегко, в отличие от специализированной среды Xcode. Поэтому далее мы зай-мемся изучением Xcode как среды для разработки ваших программ. 2.2. Объяснение вашей первой программы
Познакомившись с компиляцией и выполнением программы Objective-C, рас-смотрим эту программу более подробно. Еще раз приведем ее текст. // First program example (Первый пример программы) #import <Foundation/Foundation.h> int main (int arge, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@"Programming is fun!"); [pool drain]; return 0; }
В Objective-C
В первой строке программы мы встречаем понятие комментария: // First program example
Комментарий используется для документирования программы и удобства ее чтения. Из комментариев читатель программы (программист или человек, поддерживающий программу) видит назначение и логику определенной про-граммы или последовательности операторов.
Комментарии можно вставлять в программу Objective-C двумя способами. Один из них - это использование двух последовательных слэшей (//). Компилятор игнорирует все символы после слэшей, вплоть до конца строки.
Комментарий можно также инициировать с помощью символов / и . Ком-ментарий начинается с символов / и завершается символами / с любым числом предшествующих пробелов. Все символы между открывающими / и зак-рывающими */ считаются частью комментария и игнорируются компилятором Objective-C. Эта форма комментария часто используется, если комментарий занимает несколько строк: /* Этот файл реализует класс с именем Fraction, который представляет дробные числа. Используются методы, которые позволяют работать с дробями, например, addition (сложение), subtraction (вычитание) и т.д. Более подробную информацию см. в документе: /usr/docs/classes/fractions.pdf */
Вы сами выбираете стиль комментариев. Вложенность комментариев в стиле /* не допускается.
Имеются три причины для того, чтобы вставлять комментарии в программу. Во-первых, намного проще документировать программу, когда вы еще держите в уме ее логику, чем восстанавливать ее логику после того, как программа завершена. Во-вторых, при вставке комментариев на ранних стадиях вы облег-чаете себе этап отладки, когда происходит выявление и отладка ошибок. Ком-ментарий не только помогает вам (и другим) в чтении программы, но и помогает выяснять путь к источнику логической ошибки. И последнее — я не встречал ни одного программиста, которому нравилось бы документирование программы, так что после окончания отладки программы вы вряд ли займетесь вставкой комментариев. Менее скучно — вставлять их при разработке программы.
В следующей строке программы 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; }