協議
1、簡介
1.1 協議可以理解爲規範,不同的對象遵守相同的規範就可以在規範內去實現相同的功能
1.2 不同的瀏覽器都能打開同一個網站,並顯示出相同的效果,就是因爲他們都遵守瞭解析HTML的規範
2、協議分類
2.1 非正式協議(informal protocol)
查閱官方文檔可知,非正式協議就是NSObject或他的子類的分類,這裏不作講解,以後會具體講解分類
2.2 正式協議
正式協議,即規定了有一些列的方法,可以定義是否必須實現,也可以採用其他的協議
3、協議使用
1、定義
協議使用<>定義,如<NSObject>
協議可以單獨定義爲一個頭文件,即.h文件,也可以在一個類中定義
2、關鍵字
3、協議方法的限制@protocol 協議名 <父協議>
// 這裏是協議方法
@end
@required修飾的協議必須實現,是默認關鍵字
@optional修飾的協議方法,可選擇是否實現
協議只提供方法,不提供具體的實現
代理
1、簡介
代理是一種設計模式,主要目的是實現低耦合的設計思想
2、概念
2.1 代理方
2.1.1 實現某個方法或功能的那一方
2.1.2 在正式協議中,只有遵守協議才能成爲代理方
2.2 委託方
2.3 協議、代理方、委託方的關係2.2.1 將方法或任務交給代理方實現的那一方
2.2.2 在正式協議中,多將協議定義在委託方
2.3.1 協議是代理方、委託方的限制,作爲一種約束雙方的方式
2.3.2 協議是代理方、委託方的通道,可以用來傳遞數據等
3、具體實例
2.3.1 情景
有一箇中國買家想買美版蘋果電腦,但是不方便,剛好他有朋友在美國,可以幫他代購
2.3.2 具體分析
中國買家:委託方
韓國買家:代理方
約束條件:協議,委託方找代理方辦事情,但是辦什麼事情呢,這就是協議裏面的內容,即代購蘋果電腦
2.3.3 關鍵代碼
// 單獨定義協議的頭文件 #import <Foundation/Foundation.h> @protocol Purchase <NSObject> //必須實現 @required - (void)buyComputer; // 可選擇是否實現 @optional - (void)cutPrice; @end
// 也可以在委託方定義協議 // @protocol Purchase <NSObject> // @required // - (void)buyComputer; // @optional // - (void)cutPrice; // @end // 委託方 @interface Buyer : NSObject // 只有遵守協議的對象才能成爲代理 @property id<Purchase> delegate; // 委託方的方法 - (void)planBuyComputer; @end
// 代理方 // 只有遵守協議才能成爲代理 @interface Agent : NSObject <Purchase> @end
// 代理方實現協議方法 - (void)buyComputer { NSLog(@"代購者成功購買了電腦..."); }
// 主函數 // 1.創建對象 Buyer *buyer = [[Buyer alloc] init]; Agent *agent = [[Agent alloc] init]; // 2.設置代理 buyer.delegate = agent; // 3.實現方法 [buyer planBuyComputer];