runtime Method

本文详细介绍了Objective-C runtime中的Method类型,包括其结构体指针、所有方法的使用,以及如何获取函数列表、函数名和参数类型。通过实例展示了获取函数编码的过程,解析了编码中的数字含义。最后提到了`method_invoke`的使用和Type Encoding的重要性。
摘要由CSDN通过智能技术生成

原文出自:标哥的技术博客

前言

本篇文章只讲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(@"%@"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值