2009-12-16 41 views
4

任何人都可以簡要說明如何使用消息轉發?目標C中的消息轉發

鏈接

  • Apple documentation:蘋果文檔往往是好作爲參考,但足以冗長不是最好作一介紹。
+0

對於那些沮喪的人,我實際上已經閱讀了大部分文章 - 它只是作爲參考而不是介紹主題 – Casebash 2009-12-17 00:36:18

回答

5

簡單的委託模式:你的對象響應消息amethod方法,那麼它檢查是否存在其他物體響應發送[otherObject respondsToSelector:@selector(amethod方法)的amethod方法的消息,它返回一個布爾值。如果otherObject的確如此,那麼你很清楚發送消息。

更多技術優點NSInvocation方法:如果您的對象發送了一條消息,它將無法響應(crazyMethodName),然後在您的對象上調用forwardInvocation。 NSObject的forwardInvocation的默認實現只調用了doesNotRecognizeSelector,因爲你的對象不能識別選擇器。您可以通過檢查另一個對象是否響應調用的選擇器並在另一個對象上調用該調用(如果是)來覆蓋forwardInvocation的默認實現。

3

消息轉發的一個常見用途是使一個類作爲其他類的代理:將消息發送給此NSProxy子類的一個實例,並將其分派給它認爲合適的任何類或對象。

消息轉發確實只允許一個類接收它不能接受的消息:您甚至可以使用它來動態地創建方法。這個應用程序將是一個NSManagedObject類別,它允許您在方法調用中訪問核心數據屬性,而無需爲每個實體編寫定製的NSManagedObject子類。這讓我想起了Ruby中的method_missing