NSInvocation的使用

在iOS中可以直接调用某个对象的消息,有几种方法:

1. 直接使用该对象进行调用;

2. 可以使用performSelector: withObject;

3. 可以使用NSInvoke来调用。

方法2以及方法3两种方法的区别在于:方法3可以适用于在方法中存在多个参数,以及需要使用该方法的返回值的时候。

使用NSInvoke的方法需要注意:

(1) 传入参数需要从下标2开始,第一个参数用于传入调用的对象

(2) 需要查看返回值类型的时候需要使用NSInvocation中的属性中的methodSignature来获取。

例如:

NSMethodSignature *msg = [[mTestInvoke class] instanceMethodSignatureForSelector:@selector(testInvoke:withArg2:)];

if (msg == nil)

{

NSLog(@"该类没有实现该方法");

return ;

}

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:msg];

// 设置调用制定方法的对象

[invocation setTarget:mTestInvoke];

// 设置第一个参数

int arg1 = 12;

[invocation setArgument:&arg1

atIndex:2];

// 设置第二个参数

int arg2 = 23;

[invocation setArgument:&arg2

atIndex:3];

// 设置需要调用的方法

[invocation setSelector:@selector(testInvoke:withArg2:)];

// 调用方法

[invocation invoke];

// 获取返回值

int returnValue = 0;

[invocation getReturnValue:&returnValue];

// 在这边需要获取返回值的类型

NSLog(@"返回值是 %d,  返回值类型是 %s", returnValue, invocation.methodSignature.methodReturnType);

时间: 2024-10-29 00:15:38

NSInvocation的使用的相关文章

转载 NSInvocation使用

在 iOS中可以直接调用 某个对象的消息 方式有2中 一种是performSelector:withObject: 再一种就是NSInvocation 第一种方式比较简单,能完成简单的调用.但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定.那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作 NSInvocation可以处理参数.返回值.会java的人都知道凡是操作,其实NSInvocation就相当于反射操作. 下面这个例子描述了如何使用NSIn

NSInvocation的基本用法

@在 iOS中可以直接调用某个对象的消息方式有2种: 1.performSelector:withObject:                                         2.NSInvocation 第一种方式比较简单,能完成简单的调用.但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定.那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作. @其实也是工作所使,原先只是知道,但没实际的用过,果然工作的时候才会实际的区去运用各

Objective-C中NSInvocation的使用

OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation. 第一个PerformaceSelector比较常用, 也比较简单. 但是这个方式最多只能传递2个参数 当需要2个以上参数时就只能用NSInvocation了 直接上代码吧, 会注释清楚 - (void)viewDidLoad { [super viewDidLoad]; //用performanceSelector调用三个参数的方法, 但只传递2

iOS 反射函数: performSelector 和 NSInvocation

当我们有方法名和参数列表,想要动态地给对象发送消息,可用通过反射函数机制来实现,有两种常用的做法: 一.performSelector 1 - (id)performSelector:(SEL)aSelector; 2 - (id)performSelector:(SEL)aSelector withObject:(id)object; 3 - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)obj

IOS NSInvocation用法简介

[摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是NSInvocation,本文介绍IOS NSInvocation用法,并提供简单的示例代码供参考. 在 iOS中可以直接调用某个对象的消息方式有两种: 一种是performSelector:withObject: 再一种就是NSInvocation. 第一种方式比较简单,能完成简单的调用.但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定.那么在这种情况下,我们就可以使用NSInvocation来进行这些相

NSMethodSignature和NSInvocation的使用(方法传多参数)

动态调用方法时会用到,例子 -(NSString *)myMethod:(NSString *)param1 withParam2:(NSNumber *)param2 {     NSString *result = @"objc";     NSLog(@"par = %@",param1);     NSLog(@"par 2 = %@",param2);     return result; } -(void)invokeMyMethod

关于 NSInvocation

Invocation   调用的意思. 可想而知NSInvocation 是一个 方法调用 封装的类. 这体现了  面向对象的思想, 及一切皆对象.函数也不例外. 一般编程中,应该很少用到这个. 但是要编写 抽象度高的 框架,或 代码. 这个是必不可少的. 跟 c# , java 里的 反射 类似 . 动态访问 和 调用方法. 下面介绍下简单使用.. 用之前可以先 自己想下.如果让你 来 封装一个函数 作为一个类 ,都需要什么. funObj  函数 对象 funObj 属性 funObj 行为

NSInvocation

main.m int main(int argc, const char * argv[]) { @autoreleasepool { /* 在ios直接调用某个对象的消息是方法有两种: 一:performselector:withObject: 二:invocation 第一种方式比较简单,能完成简单的调用.但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定.那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作 NSInvocation可以处理参数

利用NSInvocation对方法进行抽象,实现对方法的加锁

我们在实际开发中需要对离散的方式加锁实现线程安全,当然我们有多种实现方式,这只是其中一种,使用起来比较方便 + (id)performSelectorWithTarget:(id)target selector:(SEL)selector withObject:(id)arg1 ,...NS_REQUIRES_NIL_TERMINATION; { @synchronized(self){ id result = nil; NSMethodSignature *sig = [target meth