如何使用performSelector轻松实现iOS动态方法调用?

作者:贵州麻将开发公司 阅读:20 次 发布时间:2025-05-19 21:23:49

摘要:在iOS开发中,有时需要动态调用某个方法。这个时候,若不想硬编码去实现,使用performSelector就是一种常用的解决方案。本文将介绍如何使用performSelector轻松实现iOS动态方法调用。一、了解performSelectorperformSelector是NSObje...

在iOS开发中,有时需要动态调用某个方法。这个时候,若不想硬编码去实现,使用performSelector就是一种常用的解决方案。本文将介绍如何使用performSelector轻松实现iOS动态方法调用。

如何使用performSelector轻松实现iOS动态方法调用?

一、了解performSelector

performSelector是NSObject类的一个方法,其定义为:

- (nullable id)performSelector:(SEL)aSelector;

从方法的定义可以看出,performSelector可以执行指定的方法。它采用的是Objective-C中的动态调用机制。

二、performSelector的使用

下面是performSelector的使用方式:

1.多参数方法调用

在不使用performSelector的情况下,假设有一个方法:

- (void)doSomethingWithInt:(int)i str:(NSString *)str;

是一个带有两个参数的方法。那么如何调用它呢?

传统的方式是使用[对象 doSomethingWithInt:i str:str]来调用。下面介绍使用performSelector调用多参数方法。

使用performSelector调用方法,需要通过NSInvocation来封装方法调用。NSInvocation是一个对象,用于封装方法调用的目标、消息和参数。

具体的步骤如下:

① 创建NSInvocation对象,将方法调用方法和target对象进行封装。代码如下:

SEL selector = @selector(doSomethingWithInt:str:);

NSMethodSignature *sig = [target methodSignatureForSelector:selector];

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];

invocation.target = target;

invocation.selector = selector;

注意:target是你想要调用的对象,selector是想调用的方法,这里sel是定义一个选择器。

② 设置参数

NSInvocation包装的目标方法可能带有多个参数,这时需要在NSInvocation中设置参数。如下:

int i = 10086;

NSString *str = @"performSelector";

[invocation setArgument:&i atIndex:2]; // 第一个参数的下标是2

[invocation setArgument:&str atIndex:3]; // 第二个参数的下标是3

注意:第一个参数的下标从2开始,因为前两个下标已经被占用了。另外,如果传递的参数是对象,则需要使用取地址符 &来传递。

③ 执行方法调用并获取返回值

[invocation invoke];

if (sig.methodReturnLength > 0) {

// 获取返回值

id anObject;

[invocation getReturnValue:&anObject];

}

在实现调用的时候,我们就可以通过performSelector间接的调用,并带有多参数,就像下面这样:

[target performSelector:@selector(doSomethingWithInt:str:) withObject:@[@(i), str]];

不难发现,performSelector方式对于调用多参数的方法来说更加简洁明了。

2.使用字符串调用方法

performSelector还可以通过字符串的方式调用某个方法。这种方式的好处在于,它可以在运行期动态的选择要调用的方法。代码如下:

[target performSelector:NSSelectorFromString(@"doSomethingWithInt:str:") withObject:@[@(i), str]];

3.延迟调用方法

performSelector还可以实现方法的延迟调用。比如让某个方法在2秒之后调用。代码如下:

// 方式一:

[target performSelector:@selector(doSomethingWithInt:str:) withObject:@[@(i), str] afterDelay:2];

// 方式二:

[target performSelector:NSSelectorFromString(@"doSomethingWithInt:str:") withObject:@[@(i), str] afterDelay:2];

需要注意的是,在使用performSelector方法调用延迟执行的方法时,被调用的方法必须没有参数。

三、performSelector方法的限制

虽然performSelector方法可以实现动态调用方法,但是它却有比较多的限制。

1.方法必须是可见的,否则无法调用

2.只能调用无参数或者只有一个参数的方法

3.参数类型必须是基元类型,也就是说参数必须是数字或者是对象类型

4.如果想调用的方法名称是字符串,则方法名必须是Objective-C合法的

5.调用的方法必须有返回值或者返回对象

四、总结

performSelector方法是iOS开发中常用的一种方法,它可以方便地实现动态调用方法的功能。但是,在使用performSelector方法的时候,仍需要注意一些限制。相信通过学习这篇文章,你已经了解了performSelector的基本用法,希望本文对你有所帮助。

  • 原标题:如何使用performSelector轻松实现iOS动态方法调用?

  • 本文链接:https://qipaikaifa.cn/zxzx/305563.html

  • 本文由深圳中天华智网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与中天华智网联系删除。
  • 微信二维码

    ZTHZ2028

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:157-1842-0347


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部