iOS開發 - 協議與代理

協議

1、簡介

1.1 協議可以理解爲規範,不同的對象遵守相同的規範就可以在規範內去實現相同的功能

1.2 不同的瀏覽器都能打開同一個網站,並顯示出相同的效果,就是因爲他們都遵守瞭解析HTML的規範

2、協議分類

2.1 非正式協議(informal protocol)

查閱官方文檔可知,非正式協議就是NSObject或他的子類的分類,這裏不作講解,以後會具體講解分類

2.2 正式協議

正式協議,即規定了有一些列的方法,可以定義是否必須實現,也可以採用其他的協議

3、協議使用

1、定義

協議使用<>定義,如<NSObject>

協議可以單獨定義爲一個頭文件,即.h文件,也可以在一個類中定義

2、關鍵字

@protocol 協議名 <父協議>

// 這裏是協議方法

@end

3、協議方法的限制

@required修飾的協議必須實現,是默認關鍵字

@optional修飾的協議方法,可選擇是否實現

協議只提供方法,不提供具體的實現

代理

1、簡介

代理是一種設計模式,主要目的是實現低耦合的設計思想

2、概念

2.1 代理方

2.1.1 實現某個方法或功能的那一方

2.1.2 在正式協議中,只有遵守協議才能成爲代理方

2.2 委託方

2.2.1 將方法或任務交給代理方實現的那一方

2.2.2 在正式協議中,多將協議定義在委託方

2.3 協議、代理方、委託方的關係

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];

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章