iOS中 委託 代理 協議 的理解

來源:互聯網
上載者:User

標籤:

1、協議:協議不是類,是一種約定,他聲明的方法和屬性,都是獨立於其他任何特定的類,並本身不會去實現他,讓使用他的類去實現他,比如UITableView,需要實現他的cellForRowAtIndexPath等協議,誰用誰知道。

協議的兩個先行編譯指令@optional:可以選擇的方法。@required:必須執行的方法。

我們開啟UITableView的標頭檔,看下他的聲明:

@protocol UITableViewDataSource<NSObject>@required- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;// Row display. Implementers should *always* try to reuse cells by setting each cell‘s reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

可以看到,這些方法是協議要求你必須實現的。

現在來看看寫周報的事,

我們建立一個類,Work

在Work.h頭部申明要寫周報(協議)

Work.h:

#import <Foundation/Foundation.h>@protocol Weekly <NSObject>;@required-(NSString *)Progress;@optional-(NSString *)Advice;@end@interface Work : NSObject@end

Weekly協議裡面有個方法,就是Progress"進度",而且是@required的強制要求實現的

還有一個方法 Advice "建議",是@optional可實現可不實現

2、委託

假設主管是A類

A.h裡面:

#import "Work.h"@interface A : NSObject//定義一個委託代理@property (nonatomic) id <Weekly> delegate;@end

@property (nonatomic) id <Weekly> delegate;

就像主管開會,宣布了一個任務 :delegate,這個任務就是要寫周報 :<Weekly>

接下來分配

員工B類、C類、D類等,我就指寫一個B類做例子

A.m裡面:

#import "A.h"//匯入B#import "B.h"@implementation A-(instancetype)init{    self = [super init];    //執行個體化員工B    B* b = [[B alloc] init];    //設定代理的實現者是B員工對象,等於分配任務給他    self.delegate = b;    //主管查看B員工的周報    NSString* B_Progress = [b Progress];    NSString* B_Advice = [b Advice];    NSLog("%@",B_Progress);    NSLog("%@",B_Advice);    return self;}

我們會發現self.delegate = b; 會有警告,為什麼呢?因為B員工現在還只是員工B,不是已經投入寫周報的B員工,因為他還沒接受你這個任務,是不是?我做不做那是我的事,你交代給我我不做,那你就麻煩了,我可以不寫,大不了不幹是吧?跟上級有衝突的屌絲就是這樣,各種理由各種反駁,如果B接受任務,就要受寫周報約束,來看下

B.h裡面:

//匯入協議類#import "Work.h"//<Weekly>遵循周記的協議,必須寫周記@interface B : NSObject <Weekly>@end

B.m裡面實現:

//周記必須寫的內容-(NSString *)Progress{    return @"xxx項目進度達到90%!";}//可寫可不寫的內容-(NSString *)Advice{    return @"主管英明神武,沒有意見!";}

這樣,B類就實現了協議的內容,完成了主管分配的任務,並返回結果。如果不實現Progress,xcode會警示告,你沒有實現這兩個代理。


iOS中 委託 代理 協議 的理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.