Взаимодействие со временем выполнения
Программы Objective C взаимодействуют с системой во время выполнения на трех отличных уровнях: через исходный код Objective C; через методы, определенные в NSObject
класс платформы Основы; и через прямые вызовы функций времени выполнения.
Исходный код Objective C
По большей части система во время выполнения работает автоматически и негласно. Вы используете его только путем записи и компиляции исходного кода Objective C.
При компиляции кода, содержащего классы Objective C и методы компилятор создает структуры данных и вызовы функции, реализующие динамические характеристики языка. Структуры данных получают информацию, найденную в классе и определениях категории и в объявлениях протокола; они включают класс и объекты протокола, обсужденные в Определении Класса и Протоколов в Языке программирования Objective C, а также селекторов метода, шаблонов переменной экземпляра и другой информации, дистиллированной от исходного кода. Основная функция времени выполнения является той, отправляющей сообщения, как описано в Обмене сообщениями. Это вызывается выражениями сообщения исходного кода.
Методы NSObject
Большинство объектов в Какао является подклассами NSObject
класс, таким образом, большинство объектов наследовало методы, которые он определяет. (Существенное исключение NSProxy
класс; см., что сообщение Передает для получения дополнительной информации.) Его методы поэтому устанавливают способы поведения, которые свойственны к каждому экземпляру и каждому объекту класса. Однако в нескольких случаях, NSObject
класс просто определяет шаблон для того, как что-то должно быть сделано; это не обеспечивает весь необходимый код сам.
Например, NSObject
класс определяет a description
метод экземпляра, возвращающий строку, описывающую содержание класса. Это прежде всего используется для отладки — GDB print-object
команда распечатывает строку, возвращенную из этого метода. NSObject
реализация этого метода не знает то, что содержит класс, таким образом, это возвращает строку с именем и адресом объекта. Подклассы NSObject
может реализовать этот метод для возврата большего количества подробных данных. Например, Фундаментальный класс NSArray
возвращает список описаний объектов, которые он содержит.
Часть из NSObject
методы просто запрашивают систему во время выполнения для получения информации. Эти методы позволяют объектам выполнить самоанализ. Примеры таких методов class
метод, спрашивающий объект идентифицировать его класс; isKindOfClass:
и isMemberOfClass:
, которые тестируют позицию объекта в иерархии наследования; respondsToSelector:
, который указывает, может ли объект принять определенное сообщение; conformsToProtocol:
, который указывает, утверждает ли объект, что реализовал методы, определенные в определенном протоколе; и methodForSelector:
, который обеспечивает адрес реализации метода. Методы как они предоставляют объекту возможность заняться самоанализом о себе.
Функции времени выполнения
Система во время выполнения является динамической совместно используемой библиотекой с открытым интерфейсом, состоящим из ряда функций и структур данных в заголовочных файлах, расположенных в каталоге /usr/include/objc
. Многие из этих функций позволяют Вам использовать плоскость К для тиражирования то, что делает компилятор, когда Вы пишете код Objective C. Другие формируют основание для функциональности, экспортируемой через методы NSObject
класс. Эти функции позволяют разработать другие интерфейсы к системе во время выполнения и произвести инструменты, увеличивающие среду разработки; они не необходимы при программировании в Objective C. Однако несколько функций времени выполнения могли бы при случае быть полезными при записи программы Objective C. Все эти функции документируются в Ссылку Времени выполнения Objective C.