runtime学习 (方法总结 二)

void method_getArgumentType(Method m, unsigned int index, char *dst, size_t dst_len)  获取函数参数类型
struct objc_method_description *method_getDescription(Method m)  获取函数描述
IMP method_setImplementation(Method m, IMP imp)  设置函数实现IMP
void method_exchangeImplementations(Method m1, Method m2)   交换函数的实现IMP
const char *ivar_getName(Ivar v)  获取变量名
const char *ivar_getTypeEncoding(Ivar v)  获取变量编码类型
ptrdiff_t ivar_getOffset(Ivar v)  获取变量内存偏移量
const char *property_getName(objc_property_t property)  获取属性名称
const char *property_getAttributes(objc_property_t property)  获取name和value的总体描述
objc_property_attribute_t *property_copyAttributeList(objc_property_t property, unsigned int *outCount)  获取所有的name和value的总体描述
char *property_copyAttributeValue(objc_property_t property, const char *attributeName)  拷贝name和value的总体描述
Protocol *objc_getProtocol(const char *name)  获取指定协议(此协议只生命未被实现则返回nil)
Protocol * __unsafe_unretained *objc_copyProtocolList(unsigned int *outCount)  获取运行时所知道的所有协议的数组  获取到的数组需要使用free来释放
BOOL protocol_conformsToProtocol(Protocol *proto, Protocol *other)  判断一个协议是否遵守了另一个协议 
BOOL protocol_isEqual(Protocol *proto, Protocol *other)  判断两个协议是否相等
const char *protocol_getName(Protocol *p)  获取协议名
struct objc_method_description protocol_getMethodDescription(Protocol *p, SEL aSel, BOOL isRequiredMethod, BOOL isInstanceMethod)  判断某方法是否属于某个协议
struct objc_method_description *protocol_copyMethodDescriptionList(Protocol *p, BOOL isRequiredMethod, BOOL isInstanceMethod, unsigned int *outCount)   条件查找该代理的所有方法
objc_property_t protocol_getProperty(Protocol *proto, const char *name, BOOL isRequiredProperty, BOOL isInstanceProperty)  获取协议的指定属性
objc_property_t *protocol_copyPropertyList(Protocol *proto, unsigned int *outCount)  获取协议中的属性列表
objc_property_t *protocol_copyPropertyList2(Protocol *proto, unsigned int *outCount, BOOL isRequiredProperty, BOOL isInstanceProperty)  返回符合条件的所有属性
Protocol * __unsafe_unretained *protocol_copyProtocolList(Protocol *proto, unsigned int *outCount)  获取协议 proto 遵守的所有协议
Protocol *objc_allocateProtocol(const char *name)  创建新的协议实例
void objc_registerProtocol(Protocol *proto)  在运行时中注册新创建的协议
void protocol_addMethodDescription(Protocol *proto, SEL name, const char *types, BOOL isRequiredMethod, BOOL isInstanceMethod)  为协议添加方法
void protocol_addProperty(Protocol *proto, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount, BOOL isRequiredProperty, BOOL isInstanceProperty)  为协议添加属性
const char **objc_copyImageNames(unsigned int *outCount)  获取所有加载的Objective-C框架和动态库的名称
const char *class_getImageName(Class cls)    获取指定类所在动态库
const char **objc_copyClassNamesForImage(const char *image, unsigned int *outCount)  获取指定库或框架中所有类的类名
const char *sel_getName(SEL sel)  获取方法名的C字符串
SEL sel_getUid(const char *str)  注册一个方法
SEL sel_registerName(const char *str)  注册一个方法,将方法名映射到一个选择器,并返回这个选择器
BOOL sel_isEqual(SEL lhs, SEL rhs)  比较两个选择器
void objc_enumerationMutation(id obj)   抛出异常
void objc_setEnumerationMutationHandler(void (*handler)(id))  快速遍历的时候捕获一些突发性的问题
void objc_setForwardHandler(void *fwd, void *fwd_stret)  设置了消息转发的回调
IMP imp_implementationWithBlock(id block)  创建一个指针函数的指针,该函数调用时会调用特定的block
id imp_getBlock(IMP anImp)    返回与IMP(使用imp_implementationWithBlock创建的)相关的block
BOOL imp_removeBlock(IMP anImp)  解除block与IMP(使用imp_implementationWithBlock创建的)的关联关系,并释放block的拷贝
id objc_loadWeak(id *location)  加载弱引用指针引用的对象并返回
id objc_storeWeak(id *location, id obj)  存储__weak变量的新值
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)  用于给对象添加关联对象,传入 nil 则可以移除已有的关联对象
id objc_getAssociatedObject(id object, const void *key)  用于获取关联对象
void objc_removeAssociatedObjects(id object)    用于移除一个对象的所有关联对象
posted @ 2017-06-12 09:12  zzlei  阅读(474)  评论(0)    收藏  举报