В основном это означает две вещи - классы и их реализация определяются во время выполнения.
Методы
Objective-C использует динамическую диспетчеризацию.Когда метод вызывается, среда выполнения фактически отправляет сообщение (через семейство функций objc_msgSend
) и ищет соответствующий метод в таблице методов класса.Даже если метод не был реализован для класса, динамическая природа Objective-C позволяет обрабатывать или перенаправлять сообщение путем переопределения resolveInstanceMethod:
, forwardingTargetForSelector:
или forwardInvocation:
методы.Вы даже можете добавить метод во время выполнения, используя функцию class_addMethod
, или заменить существующую реализацию двух методов, используя метод перебора методов (функция method_exchangeImplementations
).
Классы
Благодаря динамическим чертам Objective-C вы можете изменять не только методы, но также добавлять / устанавливать / удалять свойства и ивары класса.Вы можете изменить даже класс экземпляра во время выполнения, используя функцию object_setClass
.
Существует гораздо больше методов, которые раскрывают полную динамическую мощь Objective-C.Вы можете обратиться к странице Objective-C Runtime для более подробной информации о том, что вы можете с ними делать.