Spec-Zone.ru › GCC 11

Предыдущая: @encode, Выше: Кодирование типов [Оглавление][Индекс]

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-11.4.0/gcc/Method-signatures.html

Spec-Zone.ru

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