Spec-Zone.ru › GCC 15

9.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 в GCC версии 4.6.

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

Spec-Zone.ru

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