对于Objective-C的...指向方法
-
23-08-2019 - |
题
我想设置一个方法调度表和我想知道是否可以创建指向在Objective-C的方法(如指针在C的作用)。我试图使用一些Objective-C运行函数来动态地切换方法,但问题是它会影响所有实例。
正如我很新的目标C,图示的例子是高度赞赏。
解决方案
目标-C方法被称为selector
s,并且由数据类型SEL
表示。如果你的对象从NSObject
继承,可以告诉它像从而进行选择(即调用一个方法):
SEL selector = @selector(doSomething:);
[obj performSelector:selector withObject:argument];
此假设你有规定的方法,例如:
-(void)doSomething:(MyObject*)arg;
选择器被分配通过SEL
关键字,这需要你想保留的方法的名称来@selector
数据类型。该方法的名称是剥夺了所有参数的方法名。例如:
-(void)doSomething:(MyObject*)arg withParams:(MyParams*)params
会作为@selector(doSomething:withParams:)
被引用。
其他提示
是的!在Objective-C,函数指针调用选择。如果已经定义了一个这样的方法:
- (void)myFunctionWithObject:(NSObject*)obj otherObject:(NSNumber*)obj2
{
}
在选择器被声明如下:
@selector(myFunctionWithObject:otherObject:)
要对对象执行一个选择器,可以使用:
[object performSelector:@selector(myFunction)];
或
[object performSelector:@selector(myFunctionTakingParameter:) withObject: o];
在选择器数据类型为线程和定时器,在这里可以调度一个线程并提供它一个选择器,该消息你想它调用特别有用。如果你需要创建一个选择器的阵列(或调度表),或者如果您需要使用多个参数来调用选择,你可以使用NSInvocation的类。它提供了一个选择器的包装和允许用户指定实际参数。
您应该记住的Objective-C已经基于一个完全动态的方法分派表。这听起来像使用选择将罚款给你,如果你只需要一个函数的引用,尽管保持的函数指针。
不隶属于 StackOverflow