如何告诉编译器我的类动态地解析方法?

时间:2010-03-02 18:11:03

标签: objective-c cocoa

我有一个使用resolveInstanceMethod来动态实现方法的类。 当我从代码的其他部分调用动态实现的方法时,编译器会发出一个警告,指出该对象可能无法响应选择器。我希望编译器不为此类发出此类警告,但是当我在其他类上调用无效选择器时,我不想禁止警告。这可能吗?

2 个答案:

答案 0 :(得分:7)

假设您知道将在编译时动态解析的方法签名,您可以在非正式类别中声明它们:

@interface MyDynamicallyResolvingClass(MethodsThatWillResolveAtRuntime)
... declare the methods here ...
@end

无需提供实施。

如果您不知道签名 - 如果方法名称也是动态的 - 那么您将需要使用-performSelector:(或单个或双个对象参数变体)或者您可能想要使用NSInvocation,除非性能是一个主要问题(如果是,有其他解决方案明显更加繁琐)。

答案 1 :(得分:4)

使用performSelector:

它相当于直接向接收方发送消息,但是,它允许您发送直到运行时才确定的消息。

如果您的方法采用一个或两个参数,则可以使用此方法的姐妹:– performSelector:withObject:– performSelector:withObject:withObject:

如果您的方法有两个以上的参数,或者不是对象类型的参数,则不会调整此答案。

相关问题