2010-03-02 40 views
6

我有一個類,它使用resolveInstanceMethod動態實現方法。 當我從代碼的其他部分調用動態實現的方法時,編譯器會發出警告,指出對象可能不會響應選擇器。我希望編譯器不要爲這個類發出這樣的警告,但是我不想在我調用其他類上的無效選擇器時禁止警告。這可能嗎?如何告訴編譯器我的類動態地解析方法?

回答

7

假設你知道會在編譯時動態解析的方法簽名,你可以宣佈「時間在一個非正式的類別:

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

無需提供一個實現。

如果您不知道簽名 - 如果方法名稱也是動態的 - 那麼您需要使用-performSelector:(或單個或雙重對象參數變體),或者您可能想要使用NSInvocation,除非性能是一個主要問題(如果是的話,還有其他解決方案顯得更加繁瑣)。

+0

一個非正式的協議完美地解決了我的問題。 – 2010-03-02 19:20:39

4

使用performSelector:

這相當於直接將消息發送給接收器,但是,它允許您發送未被確定,直到運行時消息。

如果你的方法需要一個或兩個參數,你可以使用這個方法的姐妹:– performSelector:withObject:– performSelector:withObject:withObject:

如果你的方法有兩個以上的參數,或者是對象類型的不變量,這個答案是不適應。

+0

僅適用於採用0,1或2個對象類型參數的方法。 – bbum 2010-03-02 18:31:30

+0

確實。編輯答案以澄清此限制。 – Guillaume 2010-03-02 18:50:09

相關問題