我想设置一个方法调度表和我想知道是否可以创建指向在Objective-C的方法(如指针在C的作用)。我试图使用一些Objective-C运行函数来动态地切换方法,但问题是它会影响所有实例。

正如我很新的目标C,图示的例子是高度赞赏。

有帮助吗?

解决方案

目标-C方法被称为selectors,并且由数据类型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已经基于一个完全动态的方法分派表。这听起来像使用选择将罚款给你,如果你只需要一个函数的引用,尽管保持的函数指针。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top