Получение кодировок типов для сигнатур методов в Какао / Objective-C? - PullRequest
6 голосов
/ 08 октября 2009

Мне нужно создать произвольную NSMethodSignature с "signatureWithObjCTypes:" в Какао, не имея объекта, который я могу попросить подпись с "methodSignatureForSelector:".

Для этого мне нужен метод кодирования, например, это

c12@0:4@8

для

(BOOL) isEqual: (id) object

Я пытался @encode (...) получить кодировку типа, но, похоже, это не работает для функций (это приводит к неизвестному типу '?'). Я не хочу вручную кодировать тип функции, поскольку он не переносится в разные среды выполнения.

Также не существует объявленного метода для получения кодировки.

Есть ли другой способ получить кодировку?

С уважением,

Jochen

Ответы [ 2 ]

12 голосов
/ 08 октября 2009

Как насчет чего-то вроде:

#import <objc/runtime.h>
//inside the method implementation:
Method thisMethod = class_getClassMethod([self class], _cmd);
const char * encoding = method_getTypeEncoding(thisMethod);

Или для произвольного метода:

#import <objc/runtime.h>
//inside the method implementation:
Method thisMethod = class_getClassMethod([self class], @selector(isEqual:));
const char * encoding = method_getTypeEncoding(thisMethod);
0 голосов
/ 08 октября 2009

Разве это не работает только с использованием кодировки неизвестного типа?

? | Неизвестный тип (кроме всего прочего, этот код используется для указателей на функции)

AFAIK, это не должно иметь значения, потому что это примерно размер аргумента. Указатели на функции имеют тот же размер, что и стандартный аргумент, представляющий собой int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...