Не совсем.
Objective-C является объектно-ориентированным исключительно потому, что он инкапсулирует данные и функциональные возможности в один контейнер; класс.
Это почти все, что нужно для "объектно-ориентированного программирования".
В настоящее время существует множество различных видов объектно-ориентированного программирования, и один из важнейших аспектов заключается в том, использует ли язык динамическую или статическую диспетчеризацию.
В статически распределенном языке - C ++ - лучший пример (да, я знаю, что у него есть виртуальные методы, которые принимают форму динамической диспетчеризации) - вызов метода связан во время компиляции и не может изменяться во время выполнения. То есть реализация метода, который будет использоваться для выполнения вызова метода, фиксируется во время компиляции и не может изменяться во время выполнения.
В динамически отправляемом языке, таком как Objective-C, реализация метода, который будет использоваться для выполнения вызова метода, определяется каждый раз, когда происходит вызов метода. Таким образом, с помощью использования категорий или API-интерфейса среды выполнения можно изменить реализацию метода во время работы приложения (например, именно так работает Key Value Observation).
objc_msgSend()
- это крюк, который выполняет динамическую отправку. Он берет ссылку на объект или класс и имя метода - селектор или SEL, как он называется - и ищет реализацию объекта или класса, который идет по этому имени метода. Как только реализация найдена, она вызывается.
Если реализация не найдена, objc_msgSend()
предпримет серию шагов, чтобы увидеть, хочет ли класс или экземпляр обработать нераспознанный вызов метода, позволяя одному объекту заменять другой (проксирование) или подобную функциональность.
Это намного больше, чем это. Я бы посоветовал вам прочитать документацию Apple для получения дополнительной информации .