iOS -- 委托協議 (13)

若想令自己縮寫的對象具有拷貝功能, 則需要實現 NSCopying 協議,

如果自定義的對象分為可變版本與不可變版本, 那么就要同時實現 NSCopying 協議和 NSMutableCopying 協議

復制對象是需要決定采用淺拷貝還是深拷貝, 一般情況下采用淺拷貝,

如果你所寫的對象需要深拷貝, 那么就考慮新增一個專門執行深拷貝的方法.\


// 協議與分類

OC 語言有意向特性叫做 '協議', 它與 Java 的 '接口'類似, OC 不支持多重繼承,因而我們吧某個類應該實現的一系列方法定義在協議中.協議最常見的是實現委托模式, 不過也有其他用法, 理解并善用協議可令代碼邊的易于維護, 因為協議這種方式能很好的描述接口.

'分類'也是 OC 的一項重要語言特性, 利用分類機制,我們無需繼承子類即可直接為當前類添加方法.?

?通過委托與數據源協議進行帝鄉鍵通信.

對象之間經常需要互相通信,而通信的模式,OC 開發者廣泛使用一種名為 '委托模式'的變成來實現對象間的通信,該模式的主旨是: 定義一套接口, 某個對象若想接受另一套對象的委托, 則需要遵從此接口,以便成為其'委托對象',而這'另一個對象'則可以給其委托對象回傳一些信息, 也可以在發生事件是通知委托對象.

?此模式可將數據與業務邏輯解耦, 比方說, 用戶界面里有一個顯示一系列數據所用的視圖, 那么,此試圖只應包含顯示數據所需邏輯代碼, 而不應該決定要顯示何種數據以及數據之間如何交互的問題, 視圖對象的屬性中, 可以包含負責數據與事件處理的對象, 這兩種對象分別稱為'數據源' 與 '委托'.? ? // 委托協議名通常是在相關類名后面加上 Delagate 一詞,整個類名采用駝峰命名法.以便使用此代碼的人理解,? ? // 有了這個協議之后, 類就可以用一個屬性來存放委對象.? ? // @property (nonatomic, weak) iddelagete 一定要注意,這個屬性需要定義成 weak, 而非 strong, 因為兩者之間必須是 '非擁有關系'

?委托協議中的方法一般都是可選的, 因為 扮演 '受委托者' 角色的這個對象未必關心其中所有的方法, 為了指明可選方法,委托協議經常使用 @optional 關鍵字來標注大部分或全部的方法.

// 如果要在委托對象上調用可選方法, 那么必須提前使用類型信息查詢方法 判斷這個委托對象能否響應相關選擇子.

? ? if ([_delegate respondsToSelector:@selector(action:)]) {

? ? ? ? [_delegate action:sender];

? ? }

// 這段代碼用 'respondsToSelector' 來判斷委托對象是否實現了相關方法, 如果實現了, 就調用, 如果沒有實現, 就不執行任何操作, 這樣的話, delegate 對象就可以完全按照其需要來實現委托協議的方法, 不用擔心因為哪個方法沒有實現而導致程序出問題, 即使沒有設置委托對象,程序也能正常運行. 因為給 nil 發消息將使得 if 語句的值成為 false.

?總結:

?委托模式為對象提供了 一套接口, 使其可由此將相關事件告知其他對象.

?將委托對象應該支持的接口定義成協議, 在協議中把可能需要處理的時間定義成方法.

?當某個對象需要從另外一個對象中獲取數據時,可以使用委托模式. 這種情境下, 該模式 也可以叫做 '數據源協議'.

?若有必要. 可實現含有位段的結構體, 將委托對象是否能響應相關協議方法這一信息緩存至其中;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,200評論 30 471
  • 1.項目經驗 2.基礎問題 3.指南認識 4.解決思路 ios開發三大塊: 1.Oc基礎 2.CocoaTouch...
    陽光的大男孩兒閱讀 5,016評論 0 13
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,082評論 6 13
  • 呵,傻子,想把自己背在肩上!呵,乞人,來到你自己門口求乞! 把你的負擔卸在那雙能擔當一切的手中罷,永遠不要惋惜地回...
    朱忠國閱讀 429評論 0 0
  • 晚上和李老師打電話說,我們科室一女孩要結婚了,男方說你要信我們耶穌,女生說不一定吧,男方說一定,沒有商量的余地。女...
    哎咕先生閱讀 157評論 0 0