美文网首页
NSMethodSignature|NSInvocation

NSMethodSignature|NSInvocation

作者: 愤怒的八哥 | 来源:发表于2019-04-15 18:04 被阅读0次

    A record of the type information for the return value and parameters of a method.
    记录一个方法的返回值类型信息和参数类型信息。

    初始化方法:

    //获取实例方法的签名
    - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;
    //获取类方法的签名
    + (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector;
    + (nullable NSMethodSignature *)signatureWithObjCTypes:(const char *)types;
    

    如何获取Block类型的方法的签名?
    请参照(Aspect

    static NSMethodSignature *aspect_blockMethodSignature(id block, NSError **error)
    

    ObjCTypes

    在OC中,每一种数据类型可以通过一个字符编码来表示(Objective-C type encodings

    NSInvocation

    步骤1 生成

    + (NSInvocation *)invocationWithMethodSignature:(NSMethodSignature *)signature ;
    

    步骤2 设置参数

    - (void)setArgument:(void *)argumentLocation atIndex:(NSInteger) index;
    

    情况1:如果步骤1中的signature是从SEL生成,那么参数设置要从index =2开始,因为有两个隐藏参数(self,_cmd)已经占用了index=0和index=1。
    情况1:如果步骤1中的signature是从Block生成,那么参数设置要从index =1开始,因为隐藏参数(self)占用了index=0。
    步骤3 调用

    - (void)invoke;
    - (void)invokeWithTarget:(id)target;
    

    步骤4 获取返回值

    - (void)getReturnValue:(void *)retLoc
    

    应用场景

    1、扩展系统 performSelector系列方法
    2、方法转发第三步 转发方法 封装为 NSInvocation
    3、命令模式 利用NSInvocation封装为命令 在适当的时机invoke。

    相关文章

      网友评论

          本文标题:NSMethodSignature|NSInvocation

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