通过Objective-C中的NSInvocation将参数传递给NSInvocationOperation
我正在进一步熟悉NSOperation并发性,遇到了一个有关通过Objective-C中的NSInvocation将参数传递给NSInvocationOperation,objective-c,Objective C,我正在进一步熟悉NSOperation并发性,遇到了一个有关NSInvocationOperation的问题 下面是我想要运行的方法: - (void) myTaskMethod:(NSString *)stringArg { NSLog(@"StringArg: %@", stringArg); } 下面是我如何调用它**工作** 问题: 我正试图用一种不同的方式来做这件事,准备一个NSInvocation并以这种方式传递它。这是我的密码: NSMethodSignature *si
NSInvocationOperation
的问题
下面是我想要运行的方法:
- (void) myTaskMethod:(NSString *)stringArg {
NSLog(@"StringArg: %@", stringArg);
}
下面是我如何调用它**工作**
问题:
我正试图用一种不同的方式来做这件事,准备一个NSInvocation并以这种方式传递它。这是我的密码:
NSMethodSignature *sig = [self methodSignatureForSelector:@selector(myTaskMethod:)];
NSInvocation * myTaskMethodInvocation = [NSInvocation invocationWithMethodSignature:sig];
NSString * hello = @"Hello From NSInvocation";
[myTaskMethodInvocation setArgument:&hello atIndex:2];
NSInvocationOperation * invocationOperation1 = [[NSInvocationOperation alloc]initWithInvocation:myTaskMethodInvocation];
invocationOperation1.completionBlock = ^{
NSLog(@"We finished w/ NSInvocation");
};
[invocationOperation1 start];
它正在记录“我们完成了w/NSInvocation”,但是,
myTaskMethod:
从未运行。我想我错过了一些东西,因此非常感谢您的帮助。来自invocationWithMethodSignature
的文档:
新对象的选择器必须设置为setSelector:
及其
在调用参数之前,使用setArgument:atIndex:
设置参数
我认为你需要补充:
[myTaskMethodInvocation setTarget:self];
[myTaskMethodInvocation setSelector:@selector(myTaskMethod:)];
成功了。我猜我以为它会从methodSignature中得到这些信息。将在6分钟内接受(当它允许我时),谢谢。你知道为什么它甚至会费心尝试获取methodSignature吗?我不完全确定,但我认为
NSInvocation
需要了解有关方法的一些实现细节才能调用它,这些细节封装在NSMethodSignature
对象中。如果你看一下文档,它会讨论堆栈帧长度和返回类型等等。。。
[myTaskMethodInvocation setTarget:self];
[myTaskMethodInvocation setSelector:@selector(myTaskMethod:)];