博客> Objective-C Runtime 总结(一)补充
Objective-C Runtime 总结(一)补充
2019-11-10 11:32 评论:0 阅读:702 kyloMooa
ios runtime

16. class_addMethod

作用

给类增加方法

声明

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

参数

cls

class类

name

新增方法名

imp

函数指针参考

types

参数类型

返回值

YES 或者NO (当方法已经存在)

建议

新增的方法会覆盖掉父类的同名方法,却不会覆盖掉本类的同名方法,如果需要覆盖掉本类的同名方法,请使用method_setImplementation。新增方法必须有两个参数self和_cmd

用法

class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, "v@:");

17. class_getInstanceMethod

作用

返回指定的对象方法

声明

Method class_getInstanceMethod(Class cls, SEL name);

参数

cls

class类

name

方法名

返回值

Method 或者NULL (当方法不存在于该类与父类中时)

18. class_getClassMethod

作用

返回指定的类方法

声明

Method class_getClassMethod(Class cls, SEL name);

参数

cls

class类

name

方法名

返回值

Method 或者NULL (当方法不存在于该类与父类中时)

19. class_copyMethodList

作用

返回该类的所有的对象方法(不返回父类中的方法)

声明

Method _Nonnull * class_copyMethodList(Class cls, unsigned int *outCount);

参数

cls

class类

outCount

方法个数

返回值

返回class的对象方法数组头(指针Method *),但不包括父类的对象方法。假如class不存在对象方法,则返回值为NULL,同时*outCount为0。执行完后必须free()指针。

20. class_replaceMethod

作用

替换方法

声明

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

参数

cls

class类

name

替换的方法名

imp

新的函数指针参考

types

参数类型

返回值

之前的函数指针

建议

如果name不存在,将调用class_addMethod方法,并且使用types指定的类型编码。如果name存在,将调用method_setImplementation方法,但不使用types指定的类型编码。

21. class_getMethodImplementation

作用

返回一个函数指针(如果一个特定的消息被发送到一个类的实例,它将被调用)

声明

IMP class_getMethodImplementation(Class cls, SEL name);

参数

cls

class类

name

方法名

返回值

函数指针 或者 NULL(如果cls为Nil)

建议

返回的函数指针可以是运行时内部的函数,而不是实际的方法实现。例如,如果类的实例不对选择器作出响应,返回的函数指针将是运行时的消息转发机制的一部分。

22. class_getMethodImplementation_stret

作用

返回一个函数指针,该方法的返回值类型为struct(如果一个特定的消息被发送到一个类的实例,它将被调用)

声明

IMP class_getMethodImplementation_stret(Class cls, SEL name);

参数

cls

class类

name

方法名

返回值

函数指针 或者 NULL(如果cls为Nil)

23. class_respondsToSelector

作用

判断该类是否包含指定的方法

声明

BOOL class_respondsToSelector(Class cls, SEL sel);

参数

cls

class类

sel

方法名

返回值

YES 或者 NO

建议

使用respondsToSelector: 或者 instancesRespondToSelector:替换

24. class_addProtocol

作用

给类添加协议

声明

BOOL class_addProtocol(Class cls, Protocol *protocol);

参数

cls

class类

protocol

协议

返回值

YES 或者 NO(如果类之前已经遵守了该协议)

25. class_addProperty

作用

给类添加字段

声明

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

参数

cls

class类

name

字段名

attributes

字段的属性数组(例如NSString、strong、nonatomic)

attributeCount

字段属性个数

返回值

YES 或者 NO(如果类已经包含了该字段)

26. class_replaceProperty

作用

替换类字段

声明

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

参数

cls

class类

name

字段名

attributes

字段的属性数组(例如NSString、strong、nonatomic)

attributeCount

字段属性个数

27. class_conformsToProtocol

作用

判断类是否遵守指定的协议

声明

BOOL class_conformsToProtocol(Class cls, Protocol *protocol);

参数

cls

class类

protocol

协议名

返回值

YES 或者 NO

建议

使用conformsToProtocol:替代

28. class_copyProtocolList

作用

描述一个类所采用的协议。

声明

Protocol * _Nonnull * class_copyProtocolList(Class cls, unsigned int *outCount);

参数

cls

class类

outCount

协议个数(如果outCount 为NULL 不返回协议个数)

返回值

NULL(如果cls没有采用协议或者cls是Nil)。超类或其他协议所采用的任何协议都不包括在内。在执行完后必须free()指针

29. class_getVersion

作用

返回类定义的版本号。

声明

int class_getVersion(Class cls);

参数

cls

class类

返回值

类版本号

30. class_setVersion

作用

设置类版本号。

声明

void class_setVersion(Class cls, int version);

参数

cls

class类

version

版本号

31. objc_getFutureClass

作用

用于CoreFoundation's 桥接

声明

Class objc_getFutureClass(const char *name);

建议

不要使用

32. objc_setFutureClass

作用

用于CoreFoundation's 桥接

声明

void objc_setFutureClass (Class cls,const char *name);

建议

不要使用

收藏
0
sina weixin mail 回到顶部