Spec-Zone.ru › GCC 10

Next: Перенаправляющий крючок, Up: Передача сообщений с GNU Objective-C Runtime [Содержание][Индекс]

8.10.1 Динамическая регистрация методов ¶

Если objc_msg_lookup() не находит подходящей реализации метода, потому что получатель не реализует требуемый метод, он пытается определить, может ли класс динамически зарегистрировать метод.

Для этого среда выполнения проверяет, реализует ли класс получателя метод

+ (BOOL) resolveInstanceMethod: (SEL)selector;

в случае метода экземпляра или

+ (BOOL) resolveClassMethod: (SEL)selector;

в случае метода класса. Если класс реализует его, среда выполнения вызывает его, передавая в качестве аргумента селектор исходного метода, и если он возвращает YES, среда выполнения пытается выполнить поиск снова, что теперь может быть успешным, если соответствующий метод был динамически добавлен +resolveInstanceMethod: или +resolveClassMethod:.

Это позволяет классам динамически регистрировать методы (добавляя их в класс с помощью class_addMethod) при их первом вызове. Для этого класс должен реализовать +resolveInstanceMethod: (или, в зависимости от случая, +resolveClassMethod:) и распознавать селекторы методов, которые могут быть зарегистрированы динамически во время выполнения, регистрировать их и возвращать YES. Он должен возвращать NO для методов, которые он не регистрирует динамически во время выполнения.

Если +resolveInstanceMethod: (или +resolveClassMethod:) не реализовано или возвращает NO, среда выполнения пытается использовать перенаправляющий крючок.

Поддержка +resolveInstanceMethod: и resolveClassMethod: была добавлена в GNU Objective-C runtime в версии GCC 4.6.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/Dynamically-registering-methods.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API