iOS開發之protocol和delegate

來源:互聯網
上載者:User

 protocol——協議

協議是用來定義對象的屬性,行為和用於回調的。
    協議中有兩個關鍵字@private和@optional,@private表示使用這個協議必須要寫的方法,@optional表示可選的方法,用不到可以不寫。

就像UITableView,它有兩個協議:UITableViewDelegate和UITableViewDataSource,UITableViewDelegate是規定行為操作的,裡面的方法都是可選的方
法,UITableViewDataSource是規定資料存放區結構的,有兩個必選方法。因此你再實現UITableViewDataSource時必須要定義這兩個方法,否則程式會出錯。
如果你使用了響應的類或者控制項,如果該類定義了協議,就可以根據需要實現該協議。


protocol和java裡interface的概念類似,是Objective-C文法的一部分。
定義protocol如下
@protocol ClassADelegate - (void)methodA;- (void)methodB; @end

那麼就是定義了一組函數,這組函數放在一起叫作一個protocol,也就是協議。

函數是需要被實現的,所以如果對於class如下

@interface ClassB <ClassADelegate> {}@end

就叫作ClassB conform to protocol ClassADelegate,也就是說ClassB實現了這個協議,
也就是實現了這一組函數。

有了上面這個標頭檔,我們就可以放心作調用

ClassB *b = [[ClassB alloc] init];[b methodA];[b methodB];

而不用擔心出現unrecognized selector sent to instance這種錯誤了。

所以protocol就是一組函數定義,是從類聲明中剝離出來的一組定義。

id<ClassADelegate> b = ...;[b methodA];

這種用法也常見,b是一個id類型,它知道ClassADelegate這組函數的實現。

delegate——委託,代理
適用場合:
類A調用類B, 當類B想回調類A的方法的時候, 要用到delegate
要理解下面的代碼的話, 要知道的一個知識點是 協議(protocal)檔案:ClassA.h#import <Foundation/Foundation.h>#import "ClassB.h"@interface ClassA : NSObject<SampleProtocal>- (void)test;@end檔案:ClassA.m#import "ClassA.h"@implementation ClassA-(void)test{    ClassB *classB = [[ClassB alloc] init];    classB.delegate = self;        [classB actionOfClassB];}-(void)callback{    NSLog(@"這個方法會被類B調用");}@end檔案:ClassB.h#import <Foundation/Foundation.h>@protocol SampleProtocal <NSObject>@required- (void)callback;@end@interface ClassB : NSObject{    id<SampleProtocal> delegate;}@property (nonatomic, retain) id<SampleProtocal> delegate;- (void)actionOfClassB;@end檔案:ClassB.m#import "ClassB.h"@implementation ClassB@synthesize delegate;-(void)actionOfClassB{    [delegate callback];}@end

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.