Spec-Zone.ru › GCC 14

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-13.3.0/gcc/Dynamically-registering-methods.html

Spec-Zone.ru

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