博客> Objective-C Runtime 总结(四)
Objective-C Runtime 总结(四)
2019-05-20 23:00 评论:0 阅读:351 kyloMooa
ios libstdc++

第九篇 方法操作

1. method_invoke

作用

调用实现的方法

声明

id method_invoke(id receiver, Method m, ...);

参数

receiver

消息接收者(不可以为nil)

m

方法指针

...

方法参数

返回值

该m方法的返回值

建议

此方法较method_getImplementation 和 method_getName更快

2. method_invoke_stret

作用

调用实现的方法并返回一个数据结构

声明

void method_invoke_stret(id receiver, Method m, ...);

参数

receiver

消息接收者(不可以为nil)

m

方法指针

...

方法参数

建议

此方法较method_getImplementation 和 method_getName更快

3. method_getName

作用

返回方法名

声明

SEL method_getName(Method m);

参数

m

方法

返回值

SEL类型的指针(方法选择器)

建议

搭配sel_getName 方法获取方法名

4. method_getImplementation

作用

返回方法的实现

声明

IMP method_getImplementation(Method m);

参数

m

方法指针

返回值

IMP类型的方法指针

5. method_getImplementation

作用

返回方法的参数与返回值

声明

const char * method_getTypeEncoding(Method m);

参数

m

方法指针

返回值

该m方法的参数与返回值

6. method_copyReturnType

作用

获取方法返回值类型

声明

char * method_copyReturnType(Method m);

参数

m

方法指针

返回值

返回该方法m的返回值类型,使用后需要free()该返回值

7. method_copyArgumentType

作用

获取该方法单一的参数类型

声明

char * method_copyArgumentType(Method m, unsigned int index);

参数

m

方法指针

index

参数下标

返回值

返回index对应参数的类型,使用后需要free()该返回值,或者NULL(当不存在index对应的参数)。使用后需要free()该返回值

8. method_getReturnType

作用

获取方法返回值类型

声明

void method_getReturnType(Method m, char *dst, size_t dst_len);

参数

m

方法指针

dst

返回值接收地址

dst_len

dst长度

9. method_getNumberOfArguments

作用

获取方法的参数个数

声明

unsigned int method_getNumberOfArguments(Method m);

参数

m

方法指针

返回值

方法的参数个数

10. method_getArgumentType

作用

获取该方法单一的参数类型

声明

void method_getArgumentType(Method m, unsigned int index, char *dst, size_t dst_len);

参数

m

方法指针

index

参数下标

dst

返回值接收地址

dst_len

dst长度

11. method_getDescription

作用

返回指定方法的方法描述结构。

声明

struct objc_method_description * method_getDescription(Method m);

参数

m

方法指针

返回值

objc_method_description 结构体

12. method_setImplementation

作用

设置一个方法的实现

声明

IMP method_setImplementation(Method m, IMP imp);

参数

m

方法指针

imp

方法实现

返回值

m方法修改之前的imp

13. method_exchangeImplementations

作用

交换方法的实现

声明

void method_exchangeImplementations(Method m1, Method m2);

参数

m1

方法指针1

m2

方法指针2

使用方法

IMP imp1 = method_getImplementation(m1);
IMP imp2 = method_getImplementation(m2);
method_setImplementation(m1, imp2);
method_setImplementation(m2, imp1);

第十篇 库操作

1. objc_copyImageNames

作用

返回所有加载的库名

声明

const char * _Nonnull * objc_copyImageNames(unsigned int *outCount);

参数

outCount

返回数组名的个数

返回值

该方法的返回值

建议

char *的数组包含了所有加载的库名

2. class_getImageName

作用

返回类的所属库

声明

const char * class_getImageName(Class cls);

参数

cls

返回值

库名

3. objc_copyClassNamesForImage

作用

返回库的所有类名

声明

const char * _Nonnull * objc_copyClassNamesForImage(const char *image, unsigned int *outCount);

参数

image

库名

outCount

返回的类名个数

返回值

类名数组

收藏
0
sina weixin mail 回到顶部