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

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

Жанры

Программирование на 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

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

Звездная Кровь. Экзарх I

Рокотов Алексей
1. Экзарх
Фантастика:
боевая фантастика
рпг
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Звездная Кровь. Экзарх I

Старый, но крепкий 3

Крынов Макс
3. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 3

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Лекарь Империи 9

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

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

Девочка из прошлого

Тоцка Тала
3. Айдаровы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка из прошлого

Дорогами алхимии

Видум Инди
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Дорогами алхимии

Цикл "Отмороженный". Компиляция. Книги 1-14

Гарцевич Евгений Александрович
Отмороженный
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.00
рейтинг книги
Цикл Отмороженный. Компиляция. Книги 1-14

Инженер Петра Великого 4

Гросов Виктор
4. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого 4

Сильнейший Столп Империи. Книга 1

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

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Александри В. Стихотворения. Эминеску М. Стихотворения. Кошбук Д. Стихотворения. Караджале И.-Л. Потерянное письмо. Рассказы. Славич И. Счастливая мельница

Эминеску Михай
126. Библиотека всемирной литературы
Поэзия:
поэзия
5.00
рейтинг книги
Александри В. Стихотворения. Эминеску М. Стихотворения. Кошбук Д. Стихотворения. Караджале И.-Л. Потерянное письмо. Рассказы. Славич И. Счастливая мельница

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10

Мой муж – чудовище! Изгнанная жена дракона

Терин Рем
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мой муж – чудовище! Изгнанная жена дракона