簡體   English   中英

iOS 代表的目的是什么?

[英]What is the purpose of an iOS delegate?

我了解委托在 iOS 中的作用,並且我查看了示例代碼,但我只是想知道這種封裝的優點(而不是在主對象中包含委托方法)。

委托設計模式的優點是松耦合。 It enables class A (the delegate) to depend on class B (the delegating class) without class B having to have any knowledge of class A. This ensures that the dependency relationship is one-way only, rather than being circular.

forms 也是 Apple 框架的基礎(小寫“f”),因為它允許它們在需要特定於您的應用程序的功能時適當地調用您的代碼。 例如,響應按鈕點擊或告訴表格視圖應該有多少部分。

委托是一種設計模式,不僅用於 iOS,而且用於許多其他語言。 它使您能夠在 class 層次結構中傳遞值和消息。

在 iOS 中,委托需要“委托” class 實現包含“委托”知道的方法的協議。 還在追?

委托類的實現將調用這些協議方法,但委托 class 將在其 class 中實現這些方法。

這使您的課程保持清潔。

實際上,如果您可以向單個 class 添加新方法,則實際上不需要委托。 但是對於 UIKIT 的 UIView class,Apple 不允許您向他們的 class 添加新的實現。

如我錯了請糾正我。

iOS 中委托的最常見用途是在彼此不相關或部分相關的模塊內建立通信。 例如,在 UINavigationController 中向前傳遞數據非常簡單,我們可以使用 segue。 但是,向后發送數據有點棘手。 在這種情況下,我們可以使用委托將數據向后發送。

讓我們調用,class,與第一個 Controller ClassA 和 class 相關聯,與第二個 Z9BBF373023688 相關聯。 第一個 Controller 通過正向連接連接到第二個 controller。 我們可以通過這個 segue 將數據從 ClassA 傳遞到 ClassB。 現在,我們需要將一些數據從 ClassB 傳遞給 ClassA,我們可以使用委托。

發送方類(ClassB)需要在其 header 文件(.h)中有一個協議,並且還需要在塊內作為委托引用它,@interface ClassB....@end。 這個引用讓 ClassB 知道它有一個委托。 任何想要使用此 ClassB 的 class 都必須實現此協議所需的所有方法(如果有)。 因此,接收方 class,ClassA 將實現該方法,但調用將由發送方 class, ClassB 進行。

這樣,接收方 class 就不用擔心發送方類的內部結構,可以接收到需要的信息。

據我了解,當 object 將處理事件的責任傳遞給另一個 object 時,委托就是“委托”該 object 的責任。

例如,如果您在 iOs 中有一個 NSButton,您通常將 Delegate 分配為父視圖 controller。 這意味着不是在按鈕定義中處理 touchUp 事件,而是在視圖 controller 中處理。

與簡單地在“主對象”中實現方法相比,委托的主要優點是委托利用了動態綁定。 在編譯時,不需要知道委托 object 的 class。 例如,您可能有一個委托windowDidMove:方法的 class。 在這個 class 中,您可能會看到一些代碼,例如

if([[self delegate] respondsToSelector:@selector(windowDidMove:)]) {
    [[self delegate] windowDidMove:notification];
}

在這里,委托 class 在運行時檢查其委托是否響應給定的方法選擇器。 這說明了一個強大的概念:委托 class 除了是否響應某些方法之外,不需要了解委托的任何信息。 這是一種強大的封裝形式,可以說它比超類-子類關系更靈活,因為委托人和委托人是如此松散耦合。 最好在“主要對象”(委托對象)中簡單地實現方法,因為它允許在運行時更改方法的實現。 也有爭議的是,這種動態運行時使代碼本質上更加危險。

委托是 iOS 應用程序的重要設計模式。所有直接或在后台的應用程序都使用此委托模式。 委托設計模式允許 object 代表另一個人行事。 如果我們正在使用 tableview,則有“ tableViewDelegate ”和“ tableViewDataSource ”。 但這意味着什么

假設你有一個表格視圖。 現在對此有一些主要關注。 1.這個tableview的數據源(將出現在table view中的數據)是什么? 2.多少行表格視圖等委托設計模式使用另一個object作為這些問題的提供者或解決者來解決這些問題。 一個 object 將自己標記到表視圖並通過將自己標記為表視圖的代表來確保表視圖“是的,我是可以幫助你的人”。謝謝

委托意味着一個 object 將行為傳遞給另一個 object..

標記為委托的 class 負責處理發生某些事件時發送的回調。 例如,在 UITextField 的情況下,當一些事件發生時調用一些方法,例如開始編輯、結束編輯、輸入字符等。這些方法已經在協議中定義。 我們必須為此分配委托,即哪個 class 將處理這些事件。

在代理人的幫助下,可以實現雙向溝通。 委托可用於使 object 可重用,以提供發送消息的靈活方式或實現自定義。

In iOS ecosystem especially UIKit Framework which consists of UIApplication , UITableView , UICollectionView , UITextfield & so on uses delegate & datasource design pattern intensively to communicate data to and fro.

委托設計模式用於將數據從 FirstVC(Delegator) 傳遞/通信到 SecondVC(Delegate) 以完成任務。 在這里,SecondVC(Delegate) 符合協議委托並通過提供主體來完成 FirstVC(Delegator) 給出的任務來實現其所有要求,例如方法。 此外,FirstVC(Delegator) object 將具有協議委托類型的可選屬性,即必須由 SecondVC(Delegate) 分配的委托。

現在,FirstVC(Delegator) 可以通過傳遞來自其委托屬性的數據來調用位於 SecondVC(Delegate) 中的該方法。

EX:CEO(FirstVC)將數據(即“機密數據”)傳遞給秘書(SecondVC)以使用該數據進行進一步處理。

數據源設計模式是委托模式的一部分,用於在將任務分配給 SecondVC(Delegate) 時將數據從 SecondVC(Delegate) 傳遞/通信到 FirstVC(Delegator)。 在這里,SecondVC(Delegate) 符合協議數據源並通過在 FirstVC(Delegator) 給出任務后提供主體與 FirstVC(Delegator) 對話來實現其所有要求,例如具有返回類型的方法。 此外,FirstVC(Delegator) object 將具有協議 dataSource 類型的可選屬性,即必須由 SecondVC(Delegate) 分配的 dataSource。

現在,FirstVC(Delegator) 可以通過從其 dataSource 屬性傳遞數據來調用具有位於 SecondVC(Delegate) 中的返回類型的方法。

EX:秘書(SecondVC)回復了一個數據,即“先生,我已經有太多工作要做了。拜托,你能把這些數據分配給其他人嗎?”給CEO(FirstVC)。 現在,CEO(FirstVC) 將分析這些數據以進行進一步的處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM