我想我明白了代表應該做什麼。如果一個類符合該協議,它會告訴底層系統:「嗨,我是UIApplication對象的代表,告訴我發生了什麼,我可以告訴你該怎麼做!」。在iPhone應用程序中可能有多個符合UIApplicationDelegate協議的類是否有意義?
什麼,如果多個類實現呢?那可能嗎?這有任何意義嗎?
我想我明白了代表應該做什麼。如果一個類符合該協議,它會告訴底層系統:「嗨,我是UIApplication對象的代表,告訴我發生了什麼,我可以告訴你該怎麼做!」。在iPhone應用程序中可能有多個符合UIApplicationDelegate協議的類是否有意義?
什麼,如果多個類實現呢?那可能嗎?這有任何意義嗎?
雖然您可以實現符合UIApplicationDelegate協議的多個類只有一個,第一個會接收這些消息。
實現一個協議來創建委託只是方程的一部分。然後該代表必須註冊生成消息的代碼,這些系統通常只支持一個代理。
在UIApplication的情況下,您可以使用UIApplication共享類中的'delegate'屬性更改委託,但這會替換原始委託,而不會添加額外的委託。
如果您需要向其他系統廣播UIApplication級別的消息,那麼這是您應該添加到您的現有代理的功能。
您可以實現多個採用UIApplicationDelegate協議的類,但在任何給定時間只能有一個實際的委託。它由[UIApplication sharedApplication].delegate
設置,通常由主NIB文件通過插座連接設置。
只要符合協議不會將您的對象設置爲委託,您需要明確地在筆尖或代碼中執行此操作。如前所述,一次只有一個對象可以成爲代表。擁有多個委託可能在某些情況下有意義 - 例如,如果您有一個顯示兩組數據的表視圖,則可以爲它創建兩個委託和數據源對象,並根據需要在它們之間切換。儘管這對於應用程序的委託來說可能沒有意義,因爲代碼非常具體。
請記住,除了調用委託方法外,有時對象還會發送通知。很多時候,它們看起來像是同一件事,因爲如果對象包含特定的方法簽名,該對象將自動爲您的委託添加通知。但關鍵的區別在於除委託之外的其他對象也可以訂閱這些通知,因此您可以一次將它們連接到多個對象。
丹尼爾·迪克森說:
您可以實現採用了UIApplicationDelegate協議的多個類,但只有一個可以在任何給定的時間實際委託。它由[UIApplication sharedApplication] .delegate設置,它通常由主NIB文件通過插座連接建立。
...但知道你可以在運行時將它們交換出去,如果你需要的話。我最近考慮使用這種技術作爲合併由不同方開發的不能共享源代碼或重構的兩個應用程序的方式;但需要在設備上的單個圖標下共同定位。