主要用途
- 利用关联对象(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)
等等
网友评论