美文网首页程序员
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理解

    以及Runtime一些Api的理解 objc_getProtocol 函数,返回指定的协议 Protocol* o...

  • 11.runtime 理解 和 常用点

    问题 1.runtime 个人理解2.runtime 常用api3.runtime 日常运用解决问题4.runti...

  • runtime之ivar内存布局篇

    随着runtime越来越常用,iOSer对runtime的理解要求也越来越高,大家都热衷于runtime源码理解,...

  • runtime02-常用API

    runtime常用API runtime API01-类相关 runtime API01-类相关-事例01 run...

  • 面试问题总结

    Runtime理解。 Runloop理解,结合计时器。 GCD常用的方法。 GCD的原理。 KVO和KVC的实现原...

  • Vue --- Runtime + Compiler vs. R

    学习目标:一、理解Runtime + Compiler vs. Runtime-only二、如何设置Runtime...

  • Android面试需要的那些技能[欢迎补充]

    一、了解常用的设计模式,数据结构和算法;二、精通Java基础,理解Java的runtime机制,熟悉Java反射,...

  • 基础篇

    Runtime之必备C知识 Runtime之类的本质 Runtime之消息处理策略 Runtime之常用API 进...

  • 2018-08-29

    Runtime 理解 Runtime 又叫运行时,是一套底层的C语言API,其为iOS内部的核心之一,我们平时编写...

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

网友评论

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

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