Что означает манипулирование поведением во время выполнения? - PullRequest
0 голосов
/ 27 ноября 2018

Я узнал, что с помощью системы диспетчеризации сообщений объективного C вы можете манипулировать поведением во время выполнения, таким как метод swizzling или даже создавать классы во время выполнения. Но что на самом деле означает изменение поведения во время выполнения?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

В основном это означает две вещи - классы и их реализация определяются во время выполнения.

Методы

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

Классы

Благодаря динамическим чертам Objective-C вы можете изменять не только методы, но также добавлять / устанавливать / удалять свойства и ивары класса.Вы можете изменить даже класс экземпляра во время выполнения, используя функцию object_setClass.

Существует гораздо больше методов, которые раскрывают полную динамическую мощь Objective-C.Вы можете обратиться к странице Objective-C Runtime для более подробной информации о том, что вы можете с ними делать.

0 голосов
/ 27 ноября 2018

Objective-C, помимо запуска вашего кода, как вы ожидаете, дает вам много возможностей манипулировать его поведением во время выполнения.По сути, вы можете создать класс с нуля и добавить к нему некоторые методы / свойства, когда ваше приложение работает, или изменить реализацию существующих селекторов - также известный как метод swizzling.

Кстати, вы можете найтибольше информации здесь:

https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...