zoukankan      html  css  js  c++  java
  • objc_msgSend method_getTypeEncoding 与 @encode

    struct objc_method {

        SEL _Nonnull method_name                                 OBJC2_UNAVAILABLE;

        char * _Nullable method_types                            OBJC2_UNAVAILABLE;

        IMP _Nonnull method_imp                                  OBJC2_UNAVAILABLE;

    @encode:

    将数据类型编码成char*(字符串)形式

    https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/ObjCRuntimeGuide.pdf

    To assist the runtime system, the compiler encodes the return and argument types for each method in a character string and associates the string with the method selector. The coding scheme it uses is also useful in other contexts and so is made publicly available with the @encode() compiler directive. When given a type specification, @encode() returns a string encoding that type. The type can be a basic type such as an int, a pointer, a tagged structure or union, or a class name—any type, in fact, that can be used as an argument to the C sizeof() operator. 

    method_getTypeEncoding

    使用@encode将消息编码成字符串形式。

    编码的格式按照

    id objc_msgSend(id self, SEL op, ...)

    参量的顺序进行布局。

    -(void)log:(SEL)sel

    {

        Method xxx = class_getInstanceMethod(self.class, sel);

        char *ret = method_getTypeEncoding(xxx);

        NSLog(@"sel:%s, %s", sel, ret);

    }

    举例:

    -(void)hello

    v16@0:8

    -(id)hello:(id)x

    @24@0:8@16

    -(void)hello:(id)x :(id)e

    v32@0:8@16@24

    解读:

    按照文档上的说明,和objc_msgSend的参量顺序

    A void v

    A method selector (SEL)  :

    An object (whether statically typed or typed id) @ 

    进行拆解解读

    v16(返回类型为空) @0(receiver id类型) :8(SEL标示)

    v32(返回类型为空) @0(receiver id类型) :8(SEL标示)@16(参量 id类型)@24(参量 id类型)

  • 相关阅读:
    ios中的几种多线程实现
    在mac下使用终端管理svn
    关于UIScrollViewDelegate协议中每个回调函数的意义及执行顺序的理解
    UIView 及其子类对象 抖动效果的实现
    ios、andriod、cocos2d 视图层次理解
    委托  通知中心   监听/观察
    iphone 中使用苹果禁用的私有Framework
    关于苹果官方网站Reachability检测网络的总结
    iOS设备的分辨率
    ios开发多线程、网络请求的理解 错误码的理解
  • 原文地址:https://www.cnblogs.com/feng9exe/p/7019460.html
Copyright © 2011-2022 走看看