Я пытаюсь получить подпись - либо объект NSMethodSignature
, либо, по крайней мере, строку кодирования типа - для метода, объявленного в протоколе.
Запрос самого объекта Protocol
isnэто невозможно, поскольку а) он не реализует methodSignatureForSelector:
, а б) (как отмечено Кевином ниже) устарел.
Функция времени выполнения protocol_getMethodDescription
возвращает struct objc_method_description
, что не 'T описано где-нибудь в документах.Хотя в публичном заголовке - :
struct objc_method_description {
SEL name;
char *types;
};
Представляется разумным предположить, что строка types
там будет того же типа строки кодирования подписи, используемой в другом месте, как та, которую ожидает +[NSMethodSignature signatureWithObjCTypes:]
, идействительно, это выглядит правильно.
Я не могу отследить фактическое, проверяемое соединение между этой строкой и процессом кодирования типов.
Я не могуПодумайте, что еще было бы, но все же, есть ли у меня основания полагать, что эта строка types
действительна для взаимодействия с другими объектами / функциями в том же времени выполнения ?Обратите внимание, что я сам не пишу строки кодирования и не ожидаю, что они будут иметь заданный формат или значение - я только хочу передать их из одной части среды выполнения / фреймворка в другую, то есть получить строку кодирования из протокола и) использовать его для создания объекта NSMethodSignature
, если он недоступен, и, возможно, б) сравнить его с объектом, сгенерированным во время выполнения NSInvocation
(т. е. в -forwardInvocation:
).