2011-09-15 68 views
0

我想知道使用自定義協議和委託的相對優勢與實現雙向類通信的其他技術相比有什麼優勢?在目標中創建自定義協議和委託的相對優勢-c

例如另一個解決方案是具備以下條件:

A關聯到B關聯到

這種方式A和B都可以訪問到每個人信息 乙...

我瞭解協議允許增加系統設計的模塊性,但我不完全確定爲什麼或者如何?

回答

2

自定義委託協議是一件好事,它允許你的對象不依賴於特定的類。任何符合給定協議的對象都可以成爲代表。例如,如果實現NSTableViewDelegate協議,任何對象都可以是表視圖的委託。

否則,如果您使用直接關聯,則必須使用某個類的對象。

0

使用委託模式(特別是使用協議),類保持鬆散耦合。在考慮MVC模式時這很重要。委託模式允許視圖與控制器保持分離。

此外,「與B關聯的A關聯」將創建保留週期。委託模式編碼內存管理問題(即類不應保留其委託)。

0

這種雙向依賴是爲了避免在編譯級別,這意味着你有每個包括包括其他的。

當面向對象編程的目標是減少組件耦合時,你會過多地綁定你的類。

即使您可以做到這一點,但並不意味着這是一個好習慣。

良好的初步實踐是指定2個協議,一個用於服務器/對象/製作/ ...,一個是客戶端/代理/消費者/ ...

那麼A將實現一個協議,會與執行第二個對象的對象交談。 B將執行第二個協議。

在這意味着你可以在未來以匹配新的API /編程模型/測試存根替換B實施結束,等

降低耦合是一個意思,以幫助你的代碼的modulartity和可測試性。

你沒有,但是從現在開始,你的代碼來襯6個月後,當你是幸福的:)

0

通常沒有必要對2個對象有一個完整的雙向通信。
通常在iPhone中,您從A發起B(例如,從列表視圖控制器的詳細視圖控制器),並將A設置爲B的代表,以便它可以接收有關相關事件的直接通知。

在面向對象的設計/編程方面,在完全雙向連接中連接2個對象是不對的。
在這種情況下,你鬆開了封裝。

一旦你使用委託設計模式,你的對象並不真正瞭解對方,但仍然可以溝通。
另外,這種方式可以將任何實現某個協議的對象設置爲委託。

這種方式的對象也不必保留對方...