美文网首页程序员
BlocksKit 理解(二) runtime常用Api理解

BlocksKit 理解(二) runtime常用Api理解

作者: 沧州宁少 | 来源:发表于2017-09-30 16:18 被阅读0次

    以及Runtime一些Api的理解

    • objc_getProtocol 函数,返回指定的协议 Protocol* objc_getProtocol(const char* name);

      • 需要注意的是如果 仅仅声明了一个协议,而未在任何类中实现这个协议的话。则会返回nil
    • class_getProperty(self, name) 返回一个objc_property_t。这个objc _ property _ t本质是一个结构体指针 如果没有相关的属性则会找不到。

    typedef struct objc_property *objc_property_t;

    • 通过拿到的objc_property_t属性然后property_getName(<#objc_property_t property#>) 获取属性名字。通过Person中有一个NSString的属性name, @property (copy,nonatomic) NSString*name; 如果通过property_getName得到的是"name",通过property_getAttributes获得是T@"NSString",C,N,V_name 。
    • sel_registerName(const char*) 获取的是一个SEL对象。比如通过setMailDelegate可以获取一个SEL对象 。注册是说原来不存在这个SEL的话,注册得到新的SEL。
    • sel_getUid(const char*)返回一个SEL。通过已有propery拿到这个const char * 然后通过sel_getUid获取这个SEL
    • property_getAttributes(property) 可以获取一个const char*对象上文提到了。获取的是T@?,C,D,N,Sbk_setCompletionBlock:类似这样的一种结构。
    • Method相关。class_getClassMethod(Class cls,SEL sel),获得是一个类的Method实例。 class_getInstanceMethod(Class cls,SEL sel)获取的是一个实例包含的是实例方法的一个Method。跟其他的同理与之对应的是class_copyMethodList。获取的是一个Method的数组。

    • class_addMethod(Class cls,SEL sel,IMP imp,types:const char*) 类增加实例方法。返回一个BOOL判断是否增加过这个方法

    总结一下runtime api的特点

    • class_get 类型得到一个特定的结构体指针

    • class_getName(Class cls) 得到一个类名字 const char*

    • class_getSuperClass(cls) 得到父类返回的是Class

    • class_getProperty(Class cls, const char*)得到一个属性 objc_property_t 类型

    • class_getClassMethod,class_getInstanceMethod得到类方法Method或者得到实例方法Method

    • class_getMethodImplement(Class cls, const char*)得到一个IMP指针

    • class_getInstanceVariable 的到一个实例方法的Ivar ,class_getClassVariable得到类方法的Ivar

    • class_copy系列 ,得到一个上面结构体的数组

      • class_copyIvarList 得到一个Ivar列表。通过Ivar能够获取这个成员的name,attributes等属性 ivar_getName(ivar),ivar_getEncodingType(ivar)
      • class_copyMethodList的到方法列表。得到的是一个Method数组。然后可以得到各种method相关的Api。 method_getName(method),method_getInstanceImplment返回的是一个IMP指针。method_getTypeEncoding返回的是一个const char*。
    • class_copyPropertyList 获取属性列表。获取的是一个objc_property_t 的数组。

    • class_copyProtocolList 获取的是一个Protocol数组

    • class_add系列

      • class_addMethod 动态增加方法
      • class_addIvar 增加成员
      • class_addProperty 增加属性
      • class_addProtocol 增加协议
    • object_类型

      • object_getClass返回一个Class对象
      • object_getClassName获取对象名称
      • object_isClass(id obj) 返回一个Bool值
    • objc_系列

      • objc_getProtocol 获取的是一个Protocol指针

    相关文章

      网友评论

        本文标题:BlocksKit 理解(二) runtime常用Api理解

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