2012-05-24 4 views
0

Я хочу получить класс возвращаемого значения экземпляра во время выполнения. Дело в том, что у меня есть тип SEL, где я храню селектор. У меня есть переменная с именем id _instance, которая указывает на экземпляр, который, как я знаю, выполняет селектор. Перед тем как выполнить метод, который я хочу знать, если я должен сделать:получение возвращаемого значения типа метода экземпляра во время выполнения

NSObject* returnValue=[_instance performSelector:_selector withObject:params.params]; 

или:

[_instance performSelector:_selector withObject:params.params]; 

Я прочитал post where someone explain the way to have that with objective-c runtime:

Method m = class_getClassMethod([_instance class], _selector); 

char ret[256]; 
method_getReturnType(m, ret, 256); 
NSLog(@"Return type: %s", ret); 

Но выходы не что иное, как RET пусто.

Действительно, этого может быть достаточно, чтобы узнать, является ли это пустотой или имеет тип возврата, но я не знаю, где искать. Я прочитал objective-c runtime reference, но единственное, что я нашел, это method_getReturnType.... Есть идеи?

+1

Вы действительно не хотите использовать этот вид интроспекции для чего, кроме образовательные эксперименты. Вниз этот путь - безумие и многие кошмары для обслуживания. – bbum

+0

Спасибо за объявление! Если у вас есть лучшее предложение о том, как это сделать, я открыт для него;) – Jpellat

+0

Что вы пытаетесь сделать? То есть Зачем тебе это нужно знать? Вероятно, стоит новый вопрос. – bbum

ответ

2

Если вы ищете метод экземпляра, вам необходимо использовать class_getInstanceMethod, а не class_getClassMethod. Методы класса и методы экземпляра - это, очевидно, разные вещи.

+0

Это прекрасно! благодаря – Jpellat

0

После поиска некоторое время я нашел библиотеку, которая использует Spotify для такого рода вещей, имя MAObjcRuntime и вы можете нашли это here