Spec-Zone.ru › GCC 15

9.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.

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

Spec-Zone.ru

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