標籤:邏輯 tor 沒有 擷取 ble mic 其他 關係 bsp
若想令自己縮寫的對象具有拷貝功能, 則需要實現 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.
// 總結:
// 委託模式為對象提供了 一套介面, 使其可由此將相關事件告知其他對象.
// 將委派物件應該支援的介面定義成協議, 在協議中把可能需要處理的時間定義成方法.
// 當某個對象需要從另外一個對象中擷取資料時,可以使用委託模式. 這種情境下, 該模式 也可以叫做 ‘資料來源協議‘.
// 若有必要. 可實現含有位段的結構體, 將委派物件是否能響應相關協議方法這一資訊緩衝至其中;
iOS -- Effective Objective-C 閱讀筆記 (8)