メソッドの引数の型を調べる

Objective-Cでメソッド(メッセージ)の型を調べることは可能だろうか、またどのようにして実装すれば良いのだろうか。

いろいろ調べてみたが、自身が持つメソッド"fooBar:"の引数の個数と型を調べるコードは以下のようになるようだ。

SEL selector = @selector(fooBar:);
NSMethodSignature *methodSignature = [[self class] instanceMethodSignatureForSelector: selector];
if ( methodSignature ) 
{
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature: methodSignature];
    int i;
    numberOfArguments = [[invocation methodSignature] numberOfArguments];
    NSMutableArray *arguments  = [NSMutableArray arrayWithCapacity: numberOfArguments-2]; //序数0にはself、序数1には_cmd(セレクタ)が暗黙的にセットされるので
    for (i = 2; i < numberOfArguments; i++) 
    {
        //引数の型をチェック
        const char *argTypes = [methodSignature getArgumentTypeAtIndex: i];
        id arg = nil;
        [invocation getArgument:&arg atIndex: i];
        if (!arg) arg = [NSNull null];
        [arguments addObject: arg];
        
    }

    //戻り値の型をチェック
    const char *returnType = [methodSignature methodReturnType];
}

つまりはNSMethodSignature-getArgumentTypeAtIndex:で引数の型、NSMethodSignature-methodReturnType:で戻り値の型が戻るのだが、char*で戻る訳であって最後は文字比較になってしまうのが格好悪い。
まあ、この方法しかないなら仕方が無いのだが。