是否可以在Objective-C中将方法作为参数传递?

eri*_*aac 21 objective-c method-signature

我有一个方法,通过单个方法调用内部变化,我想传递它作为参数变化的方法的方法/签名...这可能在目标C中,或者是太多希望对于?

Ale*_*yne 25

NSInvocation是一个用于在对象中包装方法调用的类.您可以设置选择器(方法签名),按索引设置参数.然后,您可以设置目标并调用invoke来触发调用,或者保持目标未设置并使用invokeWithTarget:在某种循环中在许多对象上调用它.

我觉得它有点像这样:

NSInvocation *inv = [[NSInvocation alloc] init];
[inv setSelector:@selector(foo:bar:)];
[inv setArgument:123 atIndex:0];
[inv setArgument:456 atIndex:1];

for (MyClass *myObj in myObjects) {
  [inv invokeWithTarget:myObj];
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想将调用对象传递给此方法,则可以使用SEL类型接受选择器(方法签名).

-(void)fooWithMethod:(SEL)selector;
Run Code Online (Sandbox Code Playgroud)

然后将选择器分配给调用对象,以便在对象上调用它.


cde*_*osa 10

或者,如果您正在使用该fooWithMethod:(SEL)selector方法,只需执行[myObject performSelector:selector]该操作,如果它没有其他参数.

有关详细信息,请参阅NSObject.