這是關於約定/最佳實踐的問題。假設你有兩個視圖控制器Foo
和Bar
。 Foo
顯示事物列表,每個事物都有一個與之關聯的圖像,其中Bar
用於呈現。例如。 Foo
可能會顯示一個人名列表,然後按下其中一個姓名可以使用Bar
控制器顯示該人的圖片。因此,Bar
需要Foo
的簡單信息 - 在這種情況下,需要顯示的圖像。目標視圖控制器上的簡單代理方法或屬性
有兩種方法,我們可以得到圖像Bar
:
我)設置Foo
爲Bar
小號委託,使用某種BarDelegate
協議我們定義的,且有BarDelegate
沿的- (UIImage *)imageToPresent;
線的強制性方法
ii)在Bar
上有一個簡單的屬性,例如@property (nonatomic, weak) UIImage *imageToPresent;
並在之前設置此屬性Foo
。
有沒有這兩個約定或首選的方法?
最好的我可以告訴你,委託方法的優點是你可以明確說明有一些事情需要Bar
工作。當然,Foo
可能會忘記將它自己設置爲Bar
的代表,但如果Bar
已經說了10個必需的屬性,那麼現在仍然只有一個地方搞亂了(忘記設置委託)而不是10.僅使用屬性的優點是它使代碼更加簡潔。我應該注意到,我只關心目標視圖控制器的生命週期中所涉及的屬性不變的情況。我知道,如果該屬性在整個生命週期中是變體,並且目標視圖控制器需要多次「查詢」源視圖控制器,那麼委派可能會有額外的吸引力。