2011-04-26 151 views
2

我需要做的事情是這樣的:Objective-C的函數指針

id myFunction = aMethodDeclaredInMyClass; 

[self myFunction] 

任何幫助表示讚賞!

+3

查看在Objective-C選擇器。谷歌的第一個結果給你你需要的一切。 – gd1 2011-04-26 23:02:35

回答

5

如果你事先知道方法:

​​

如果你事先不知道的方法名稱:

SEL selector = NSSelectorFromString(someSelectorStringYoureGiven); 
[self performSelector:selector withObject:nil]; 

兩個例子假設你的函數不接受任何參數,也不需要在不同的線程上執行,也不需要延遲執行。這些條件的所有組合都有很多變體(對於更復雜的情況,還有NSInvocation)。在xcode的文檔中搜索performSelector以查看所有變體。

+0

完美: 'SEL myAction = nil; .. some stuff .. myAction = @selector(actionWalk); ..一些東西.. [self performSelector:myAction];' 謝謝@Jarret Hardie – BQuadra 2011-04-27 10:02:01

0

另請參閱objc_msgSend()。你會設置一個SEL選擇器變量。

+2

你幾乎從不想用'objc_msgSend'直接搞亂。這就像用大刀飛撲蒼蠅一樣。有些情況下你想使用它,但它們非常特殊。 – Chuck 2011-04-26 23:14:51

+1

不是'objc_msgSend()'與'-performSelector:withObject:'差不多,但是開銷較少? (真的很好奇。) – 2011-04-26 23:18:06

+0

@雷諾茲:在一定程度上。問題是'objc_msgSend'更靈活,更容易被濫用而不會意識到,所以直接使用它是一種不好的習慣。我的措辭可能有點尖銳,但我不希望看到無辜的Googlezens不必要地在腳下自己射擊。 – Chuck 2011-04-26 23:33:17

3