美文网首页
NSInvocation

NSInvocation

作者: honzon_0 | 来源:发表于2020-09-21 16:42 被阅读0次

声明HZObject

@interface HZObject : NSObject

@end

@implementation HZObject

+ (void)test {
    NSLog(@"HZObject class test");
}

- (void)test {
    NSLog(@"HZObject instance test");
}

+ (void)hzPrintf:(NSString *)string {
    NSLog(@"HZObject class hzPrintf:%@",string);
}

- (void)hzPrintf:(NSString *)string {
    NSLog(@"HZObject instance hzPrintf:%@",string);
}

@end

NSInvocation调用方法

- (void)invocationInvoke:(SEL)selector target:(id)target arguments:(void **)arguments{
    NSMethodSignature *signature = [target methodSignatureForSelector:selector];
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    invocation.selector = selector;
    invocation.target = target;
    
    if (arguments != NULL) {
        for (int i = 0; i < 10; i++) {
            void *argument = arguments[i];
            if (argument == NULL) {
                break;
            } else {
                //Indices 0 and 1 indicate the hidden arguments self and _cmd
                //self = target,_cmd =selector
                // Use indices 2 and greater for the arguments normally passed in a message
                [invocation setArgument:argument atIndex:i+2];
            }
        }
    }
    
    [invocation invoke];
}

调用

Class hzObjectClass = [HZObject class];
HZObject *object = [[HZObject alloc] init];

SEL classTest = @selector(test);
SEL instanceTest = @selector(test);
SEL classPrintf = @selector(hzPrintf:);
SEL instancePrintf = @selector(hzPrintf:);

void *arguments[10];

[self invocationInvoke:classTest target:hzObjectClass arguments:arguments];
[self invocationInvoke:instanceTest target:object arguments:arguments];

NSString *classArgument = @"123";
arguments[0] = (void *)&classArgument;

[self invocationInvoke:classPrintf target:hzObjectClass arguments:arguments];
[self invocationInvoke:instancePrintf target:object arguments:arguments];

打印

HZObject class test
HZObject instance test
HZObject class hzPrintf:123
HZObject instance hzPrintf:123

相关文章

  • BlocksKit A2DynamicDelegate研究

    NSInvocation @interface NSInvocation:NSObject 通过方法签名获得NSI...

  • NSInvocation如何调用block

    NSInvocation如何调用block 同步发布到博客地址NSInvocation如何调用block NSIn...

  • NSInvocation个人理解

    NSInvocation的使用: //NSInvocation;用来包装方法和对应的对象,它可以存储方法的名称,对...

  • 强大的NSInvocation

    前言 在消息转发中提到过NSInvocation这个类,这里说一下我所理解的NSInvocation。NSInvo...

  • NSInvocation使用

    NSInvocation NSInvocation是一个消息调用类,主要作用是存储和传递消息。它存储的信息包含了一...

  • void SendDelegateMessage(NSInvoc

    void SendDelegateMessage(NSInvocation *): delegate (webVi...

  • 使用 Invocation 来动态调用

    NSInvocation 可以方便的调用

  • NSInvocation

    在 iOS中可以直接调用某个对象的消息方式有三种:一种是[self xxxxxxx];直接对象调用另一种是 pe...

  • NSInvocation

    NSInvocation是命令模式的一种实现,它包含选择器、方法签名、相应的参数以及目标对象。所谓的方法签名,即方...

  • NSInvocation

    NSInvocation 在 iOS中可以直接调用某个对象的消息方式有两种 一种是performSelector:...

网友评论

      本文标题:NSInvocation

      本文链接:https://www.haomeiwen.com/subject/vogvyktx.html