0

私は Objective-C の機能を使用しており、メソッドが受け取った引数のタイプforwardInvocation:を知る必要があります。私の例では、私はそれを渡していますが、代わりにそれを教えてくれます。簡単な例を次に示します。intgetArgumentTypeAtIndex:id

@interface Do : NSObject
+ (void) stuff:(int)x;
@end
@implementation Do
+ (NSMethodSignature *) methodSignatureForSelector:(SEL)selector
{
    NSMethodSignature* signature = [super methodSignatureForSelector:selector];
    if (!signature)
        signature = [self methodSignatureForSelector:@selector(forwardInvocation:)];
    return signature;
}

+ (void)forwardInvocation:(NSInvocation *)i
{
    const char* argType = [i.methodSignature getArgumentTypeAtIndex:2];
    NSLog(@"%s == %s", argType, @encode(id)); // @ == @
    NSLog(@"%s == %s", argType, @encode(int)); // @ == i
}
@end

これが私がそれを呼び出す方法です:

[Do stuff:123];

タイプとしてではidなく、なぜ私が得られないのか考えていますか?int

4

2 に答える 2

0

コンパイラを通過できる限り、引数として渡すものは実行時にそのように解釈されます。関数が を取ることを宣言できますNSNumberが、 a をそれに渡すUITableViewと、それclassは依然として になりますUITableView

于 2013-06-04T04:01:40.330 に答える