Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

Здесь объявляются переменные varl, var2,... как объекты из неопределенного класса, который подчиняется протоколам, перечисленным в угловых скобках. Список протоколов не является обязательным.

Переменным типа id можно присваивать объекты из любого класса, и наоборот. Если указаны один или несколько протоколов, компилятор проверяет, что методы, используемые из перечисленных протоколов для любой из объявленных переменных, используются соответствующим образом, то есть в соответствии с типами аргументов и возвращаемых значений для методов, объявленных в формальном протоколе.

Например, в строках id <MathOps> number; result = [number add: number2];

компилятор проверяет, определяется ли метод add: в протоколе athOps. Если да, то компилятор проверяет для этого метода согласованность с типами аргументов и возвращаемого значения. Например, если метод add: принимает целый аргумент, а вы передаете ему объект класса Fractior, то компилятор выводит соответствующее сообщение.

Система следит за классом, которому принадлежит каждый объект; поэтому на этапе выполнения она может определить класс объекта и затем выбрать для вызова подходящий метод. Эти две процедуры называются соответственно динамическим контролем типов (dynamic typing) и динамическим связыванием (dynamic binding). Выражения с сообщениями Формат 1 [получатель имя1: арг1 имя2: арг2, имяЗ: аргЗ.. ]

Выполняется вызов метода имя!:имя2:имяЗ из класса, указанного получателем, и значения арг1, арг2,... передаются как аргументы. Эго называется выражением с сообщением (message expression). Значением выражения является значение, воз-вращаемое методом, или void, если метод объявлен соответствующим образом и не возвращает никакого значения. Тип этого выражения совпадает с типом, объявленным для вызываемого метода. Формат 2 [получатель имя];

Если метод не принимает никаких аргументов,то этот формат используется для вызова метола имя из класса, указанного получателем.

Если получатель имеет тип id, то компилятор ищет среди объявленных классов определение или наследуемое определение указанного метода. Если не найдено такого определения, компилятор выводит предупреждение, что получатель не ответит на указанное сообщение. Кроме того, предполагается, что метод возвращает значение типа id и преобразует любые аргументы типа float в тип double, а также выполняет целочисленное расширение для любых целых аргументов, как описано выше в разделе «Преобразование базовых типов данных». Другие аргументы метода передаются без преобразования.

Если получатель является объе кто м - классом (который можно создать, просто указав имя класса), то вызывается указанный метод класса. В противном случае получатель является экземпляром класса, и тогда вызывается соответствующий метод экземпляра.

Если получатель является переменной или выражением со статическим конт-ролем типа, то компилятор ищетметод в определении класса (или среди любых наследуемых методов) и преобразует любые аргументы (когда это возможно), чтобы он и соответствовали ожидаемым аргументам данного метода. Например, если метод должен получать значение с плавающей точкой и ему передано значение целого тина, соответствующий аргумент автоматически преобразуется при вызове этого метода.

Если получатель является указателем на null-объект, то есть nil, ему тоже можно передавать сообщения. Если метод, связанный с сообщением, возвращает объект, то выражение с этим сообщением дает значение nil. Если метод не возвращает какого-либо объекта, то значение этого выражения не определено.

Если один и тот же метод определен более чем в одном классе (путем явного определения или врезультате наследования), компилятор проверяет среди этих классов соответствие типам аргументов и возвращаемою значения.

Все аргументы передаются методу по значению, поэтому их значения не могут быть изменены методом. Если методу передается указатель, то метод может изменять значения, на которые ссылается этот указатель, но метод все же не может изменять значение самого указателя. Формат 3 получатель.свойство

Это вызов getter-метода, то есть метода-получателя (по умолчанию свойство) для получателя, если выражение не используется как lvalue-выражение (см. Формат 4). Имя getter-метода можно изменять с помощью директивы @property, и тогда это будет вызываемый метод.

Если используется имя getter-метода по умолчанию, то приведенное выше выражение эквивалентно следующему. [получатель свойство] Формат 4 получатель.свойство = выражение

Это вызов setter-метода (метода-установщика), связанного со свойством свой-ство, и в качестве его аргумента передается значение выражения. По умолчанию вызывается setter-метод ^Свойство:, если для этого свойства не было назначено имя другого setter-метода с использованием предшествующей директивы @property.

Если используется имя setter-метода по умолчанию, то приведенное выше выражение эквивалентно следующему. [получатель set Свойство: выражение] Программные операторы

Программным оператором (program statement) является любое допустимое вы-ражение (обычно присваивание или вызов функции), которое закапчивается точкой с запятой, или это один из специальных операторов, описанных ниже. Перед любым оператором можно ставить необязательную метку; метка состоит из идентификатора, после которого ставится символ «двоеточие» (см. также оператор goto). Составные операторы

Программные операторы, содержащиеся в фигурных скобках, называются со-ставным оператором, или блоком, и могут находиться в любом месте программы, где допустим хоть один оператор. Блок может содержать свой собственный набор объявлений переменных, которые могут замещать одноименные переменные, определенные вне этого блока. Областью действия таких локальных переменных является блок, в котором они определены. Оператор break

Общий формат break;

Выполнение оператора break внутри области действия оператора for, while, do или switch вызывает прекращение работы этого оператора. Выполнение про-должается с оператора, непосредственно следующего после цикла или пере- ключалеля (switch). Оператор continue

Поделиться:
Популярные книги

Личный аптекарь императора. Том 2

Карелин Сергей Витальевич
2. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Личный аптекарь императора. Том 2

Цикл романов "Целитель". Компиляция. Книги 1-17

Большаков Валерий Петрович
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цикл романов Целитель. Компиляция. Книги 1-17

Адвокат Империи 12

Карелин Сергей Витальевич
12. Адвокат империи
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
попаданцы
5.00
рейтинг книги
Адвокат Империи 12

Эволюционер из трущоб. Том 6

Панарин Антон
6. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 6

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Развод с драконом. Отвергнутая целительница

Шашкова Алена
Фантастика:
фэнтези
4.75
рейтинг книги
Развод с драконом. Отвергнутая целительница

Наномашины, звереныш! Том 5

Новиков Николай Васильевич
5. Первый среди карапузов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наномашины, звереныш! Том 5

Первый среди равных. Книга IV

Бор Жорж
4. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IV

Сирота

Ланцов Михаил Алексеевич
1. Помещик
Фантастика:
альтернативная история
5.71
рейтинг книги
Сирота

Газлайтер. Том 26

Володин Григорий Григорьевич
26. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 26

#НенавистьЛюбовь

Джейн Анна
Любовные романы:
современные любовные романы
6.33
рейтинг книги
#НенавистьЛюбовь

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2

Кодекс Охотника. Книга XL

Винокуров Юрий
40. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XL

Наемный корпус

Вайс Александр
5. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Наемный корпус