8.3.3 Подписи методов
В этом разделе описывается кодирование типов методов, что редко нужно при работе с Objective-C. Вы можете пропустить его при первом чтении; среда выполнения предоставляет функции, которые работают с методами и могут перебирать список параметров, интерпретируя их за вас. Эти функции являются частью публичного «API» и являются предпочтительным способом взаимодействия с подписями методов из пользовательского кода.
Но если вам нужно отладить проблему с подписями методов и узнать, как они реализованы (т.е., «ABI»), читайте дальше.
Методы имеют свою «подпись», закодированную и доступную для среды выполнения. «Подпись» кодирует всю информацию, необходимую для динамической генерации вызовов метода во время выполнения: тип возвращаемого значения и аргументы.
«Подпись» представляет собой строку с нулевым завершением, составленную следующим образом:
- Тип возвращаемого значения, включая квалификаторы типа. Например, метод, возвращающий
int, будет иметьiздесь. - Общий размер (в байтах), необходимый для передачи всех параметров. Это включает два скрытых параметра (объект
selfи селектор метода_cmd). - Каждый аргумент, с кодированием типа, за которым следует смещение (в байтах) аргумента в списке параметров.
Например, метод без аргументов, возвращающий int , будет иметь подпись i8@0:4 , если размер указателя равен 4. Подпись интерпретируется следующим образом: i — тип возвращаемого значения (тип int), 8 — общий размер параметров в байтах (два указателя, каждый размером 4 байта), @0 — первый параметр (объект со смещением 0), а :4 — второй параметр (тип SEL со смещением 4).
Вы можете легко найти больше примеров, запустив программу «strings» на объекте Objective-C, скомпилированном с помощью GCC. Вы увидите много строк, очень похожих на i8@0:4. Это подписи методов Objective-C.
Предыдущий: @encode, Вверх: Кодирование типов [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Method-signatures.html