美文网首页
Runtime知识点整理5应用

Runtime知识点整理5应用

作者: 化二缺 | 来源:发表于2020-05-29 15:41 被阅读0次

主要用途

  • 利用关联对象(AssociatedObject)给分类添加属性
  • 遍历类的所有成员变量(修改textfield的占位文字颜色,字典转模型,自动归档解档)
  • 交换方法实现 (交换系统方法) 不要和KVO 混淆

API - 类

  • 动态创建一个类(参数:父类,类名,额外的内存空间)

objc_allocateClassPair(Class superclass, const char * name, size_t extraBytes)

  • 注册一个类(要在类注册之前添加成员变量)

objc_registerClassPair(Class cls)

  • 销毁一个类

objc_disposeClassPair(Class cls)

  • 获取isa指向的Class

object_getClass(id obj)

  • 设置isa 指向的Class

object_setClass(id obj, Class cls)

  • 判断一个对象是否为Class

object_isClass(id obj)

  • 判断一个类是否是元类

class_isMetaClass(Class cls)

  • 获取父类

class_getSuperclass(Class cls)

成员变量

  • 获取一个实例变量

class_getInstanceVariable(Class cls, const char * name)

  • 拷贝实例变量列表(最后需要free释放)

class_copyIvarList(Class cls, unsigned int * outCount)

  • 设置和获取成员变量的值

object_setIvar(id obj, Ivar ivar, id value)
object_getIvar(id obj, Ivar ivar)

  • 动态的添加成员(已经注册的类是不能动态的添加成员变量的)

class_addIvar(Class cls, const char * name, size_t size, uint8_t alignment, const char * types)

  • 获取成员变量的相关信息

ivar_getName(Ivar v)
ivar_getTypeEncoding(Ivar v)
ivar_getOffset(Ivar v)

属性相关

  • 获取一个属性

class_getProperty(Class cls, const char * name)

  • 拷贝属性列表(最后要free)

class_copyPropertyList(Class cls, unsigned int * outCount)

  • 动态添加属性

class_addProperty(Class cls, const char * name, const objc_property_attribute_t * attributes, unsigned int attributeCount)

  • 动态替换属性

class_replaceProperty(Class cls, const char * name, const objc_property_attribute_t * attributes, unsigned int attributeCount)

  • 获取属性的一些信息

property_getName(objc_property_t property)
property_getAttributes(objc_property_t property)

方法相关

  • 获得一个实例方法,类方法

class_getInstanceMethod(Class cls, SEL name)
class_getClassMethod(Class cls, SEL name)

  • 方法相关操作

class_getMethodImplementation(Class cls, SEL name)
method_setImplementation(Method m, IMP imp)
method_exchangeImplementations(Method m1, Method m2)

  • 拷贝方法列表 (需要free)

class_copyMethodList(Class cls, unsigned int * outCount)

  • 动态的添加方法

class_addMethod(Class cls, SEL name, IMP imp, const char * types)

  • 动态替换方法

class_replaceMethod(Class cls, SEL name, IMP imp, const char * types)

  • 获取方法的相关信息 (带copy的都需要free)

method_getName(Method m)
method_getImplementation(Method m)
method_getTypeEncoding(Method m)
method_getReturnType(Method m, char * dst, size_t dst_len)
method_copyReturnType(Method m)
等等

相关文章

网友评论

      本文标题:Runtime知识点整理5应用

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