Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Objective-C - Синтаксис языка06 июля 2011Оглавление: 1. Objective-C 2. Синтаксис языка 3. Создание новых классов 4. Как работает механизм сообщений 5. Протоколы 6. Обработка исключений 7. Создание и уничтожение объектов 8. Управление памятью 9. Категории 10. Class objects и Objective-C runtime 11. Разное В языке Objective-C для обозначения объектов используется специальный тип id. Переменная типа id фактически является указателем на произвольный объект. Для обозначения нулевого указателя на объект используется константа nil. При этом вместо id можно использовать и более привычное обозначение с явным указанием класса. В частности последнее позволяет компилятору осуществлять некоторую проверку поддержки сообщения объектами если компилятор из типа переменной не может сделать вывод о поддержке объектом данного сообщения, то он выдаст предупреждение. Тем самым язык поддерживает проверку типов, но в нестрогой форме. Для посылки сообщений используется следующий синтаксис: ; В этой конструкции receiver является указателем на объект, а message именем метода. В отличие от языка С++ посылка сообщения nil’у является законной операцией, всегда возвращающей нулевое значение. Сообщение может также содержать параметры: ; В этом примере именем метода является setOrigin::. Обратите внимание, что каждому передаваемому аргументу соответствует ровно одно двоеточие. При этом в приведенном примере первый аргумент имеет метку, а второй нет. Язык Objective-C позволяет снабжать метками каждый аргумент, что заметно повышает читаемость кода и снижает вероятность передачи неправильного параметра. ; В этом примере в качестве имени сообщения выступает setWidth:height:. Также поддерживается возможность передачи произвольного количества аргументов в сообщении: ; Как и функции, сообщения могут возвращать значения, при этом в отличие от языка С, типом значения, возвращаемым по умолчанию, является id. float area = ; Результат одного сообщения можно сразу же использовать в другом сообщении: ]; Как уже говорилось, в Objective-C классы сами являются объектами. Основной задачей таких объектов является создание экземпляров данного класса. При этом само имя класса играет двойную роль с одной стороны оно выступает как тип данных. А с другой стороны имя класса может выступать в качестве объекта, которому посылается сообщение. Rect * myRect = init]; В языке Objective-C нет встроенного типа для булевских величин, поэтому обычно такой тип вводится искусственно. Далее для логических величин будет использоваться тип BOOL с возможными значениями YES и NO. Первым достаточно серьёзным применением языка Objective-C было его использование в операционной системе NextStep. Для этой системы было написано большое количество различных классов на Objective-C, многие из которых до сих пор используются в Mac OS X. Имена всех этих классов начинаются с префикса NS, обозначающего свою принадлежность к операционной системе NextStep. С одним из них NSString мы столкнемся в данной статье. Этот класс служит для работы со строками. Компилятор поддерживает данный тип, автоматически переводя конструкции вида @"my string" в указатель на объект класса NSString, содержащий данную строку.
Допустим в классе Company существует instance-переменная name. @interface Company : NSObject { NSString *name; } Для доступа к ней извне лучше всего воспользоваться свойствами, которые появились в Objective C 2.0. Для декларации свойств используется ключевое слово @property. @property NSString *name; В скобках перечисляются атрибуты доступа к instance-переменной. Атрибуты разделяются на 3 группы. Имена акцессора и мутатора
Ограничение чтения/записи
И последняя группа атрибуты акцессора.
При работе под GC никакой разницы между использованием assign, retain, copy нет. Для создания кода свойств, в соответствии с тем как они описаны в декларации, можно воспользоваться автогенерацией кода: @synthesize name; Автоматически созданный код не всегда подходящее решение и может потребоваться создание методов доступа к instance-переменным вручную. Просмотров: 11398
|