2013-06-27 15 views
1

這是關於約定/最佳實踐的問題。假設你有兩個視圖控制器FooBarFoo顯示事物列表,每個事物都有一個與之關聯的圖像,其中Bar用於呈現。例如。 Foo可能會顯示一個人名列表,然後按下其中一個姓名可以使用Bar控制器顯示該人的圖片。因此,Bar需要Foo的簡單信息 - 在這種情況下,需要顯示的圖像。目標視圖控制器上的簡單代理方法或屬性

有兩種方法,我們可以得到圖像Bar

我)設置FooBar小號委託,使用某種BarDelegate協議我們定義的,且有BarDelegate沿的- (UIImage *)imageToPresent;線的強制性方法
ii)在Bar上有一個簡單的屬性,例如@property (nonatomic, weak) UIImage *imageToPresent;並在之前設置此屬性Foo

有沒有這兩個約定或首選的方法?

最好的我可以告訴你,委託方法的優點是你可以明確說明有一些事情需要Bar工作。當然,Foo可能會忘記將它自己設置爲Bar的代表,但如果Bar已經說了10個必需的屬性,那麼現在仍然只有一個地方搞亂了(忘記設置委託)而不是10.僅使用屬性的優點是它使代碼更加簡潔。我應該注意到,我只關心目標視圖控制器的生命週期中所涉及的屬性不變的情況。我知道,如果該屬性在整個生命週期中是變體,並且目標視圖控制器需要多次「查詢」源視圖控制器,那麼委派可能會有額外的吸引力。

回答

1

委託通常用於允許委託對象與主對象進行通信,以請求額外的數據或執行回調。

在你的情況下,沒有理由不立即向委託對象提供所需的所有東西,因爲你已經有了它,所以第二種選擇將是最合理的方式。

一般來說,代表團流轉或多或少這樣

:「嗨吧,這裏是你一個任務使用此數據,並做你的事情」

[稍後]

酒吧:「嘿,老大,這件事剛剛發生!」
Foo:「哦,真好!謝謝你讓我知道」

[稍後]

酒吧:‘嘿,老闆,我會需要更多的東西以結束工作’
:‘這是爲’

[稍後]

酒吧:「嘿,老闆,我做!這是我的工作」

BazDelegate協議將是Baz需要回去傳達給Foo(比方說,用戶在詳細視圖進行選擇)的情況下適當的自定義的定義的結果。

在這種情況下,你通常會在Foo定義類似

@protocol BazDelegate 
- (void)baz:(Baz *)baz didFinishSelectingWhatever:(id)whatever; 
@end 

,然後實現它從授權對象獲得有意義的回調。

相關問題