原文出自:标哥的技术博客
前言
本篇文章只讲Method
的特性及相关方法,不讲Method Swizzling
特性。关于Method Swizzling
特性,我们放在单独的一篇文章来细讲,因为这一节非常重要。
Method类型
Method类型是一个objc_method
结构体指针,而结构体objc_method
有三个成员:
/// An opaque type that represents a method in a class definition.
typedef struct objc_method *Method;
struct objc_method {
SEL method_name; // 方法名称
char *method_typesE; // 参数和返回类型的描述字串
IMP method_imp; // 方法的具体的实现的指针
}
Method所有方法
下面是官方所提供的所有Method的方法,我们一一说明其用途,看代码注释:
// 函数调用,但是不接收返回值类型为结构体
method_invoke
// 函数调用,但是接收返回值类型为结构体
method_invoke_stret
// 获取函数名
method_getName
// 获取函数实现IMP
method_getImplementation
// 获取函数type encoding
method_getTypeEncoding
// 复制返回值类型
method_copyReturnType
// 复制参数类型
method_copyArgumentType
// 获取返回值类型
method_getReturnType
// 获取参数个数
method_getNumberOfArguments
// 获取函数参数类型
method_getArgumentType
// 获取函数描述
method_getDescription
// 设置函数实现IMP
method_setImplementation
// 交换函数的实现IMP
method_exchangeImplementations
获取函数列表
我们尝试获取函数列表,并细说函数的参数type encoding、返回值类型等。我们先写以下几个方法:
- (int)testInstanceMethod:(NSString *)name andValue:(NSNumber *)value {
NSLog(@"%@", name);
return value.intValue;
}
- (NSArray *)arrayWithNames:(NSArray *)names {
NSLog(@"%@"