我知道如何使用:
[self method:object];
但是有可能获得这个的SEL对象吗?
SEL method = @selector(method:object);
不起作用。
谢谢:)
答案 0 :(得分:6)
SEL
只是选择器 - 发送的消息的名称。要捕获该消息的特定实例,其参数及其作为对象的返回值,您需要使用NSMethodSignature和NSInvocation。一个例子,基于您上面的假设-method:object
:
NSMethodSignature *sig = [SomeClass instanceMethodSignatureForSelector:@selector(method:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
// Assume that someObject is an instance of SomeClass
[inv setTarget:someObject];
// Assume an "id object" declared elsewhere.
// Also note that self & _cmd are at indices 0 & 1, respectively
[inv setArgument:&object atIndex:2]
// Some time later...
[inv invoke];
请注意,因为NSInvocation是一个对象,所以不必立即调用它。它可以存储起来供以后使用,通常是 - 如果想立即发送消息,有更简单的方法来发送消息。例如,Cocoa的标准撤销/重做机制基于存储和调用NSInvocations。
答案 1 :(得分:0)
@selector是另一种方法或功能。
以此为例:
-(IBAction)timerStart {
timer = [NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:NO];
}
-(void)targetMethod:(id)sender {
[timer invalidate];
timer = nil;
}
如您所见,运行NSTimer两秒后,选择器(targetMethod :)将被调用。 targetMethod:是一个(void)函数:(id)sender,因此运行。
在你的情况下,我认为你想要完成的是
[self performSelector:@selector(methodName:)];