iOS開發,

來源:互聯網
上載者:User

iOS開發,

因為Object-C是不支援多繼承的,所以很多時候都是用Protocol(協議)來代替。Protocol(協議)只能定義公用的一套介面,但不能提供具體的實現方法。也就是說,它只告訴你要做什麼,但具體怎麼做,它不關心。

當一個類要使用某一個Protocol(協議)時,都必須要遵守協議。比如有些必要實現的方法,你沒有去實現,那麼編譯器就會警示告,來提醒你沒有遵守××協議。注意,我這裡說的是警告,而不是錯誤。對的,就算你不實現那些“必要實現”的方法,程式也是能啟動並執行,只不過多了些警告。

Protocol(協議)的作用:

1. 定義一套公用的介面(Public)

  • @required:必須實現的方法

  • @optional:可選 實現的方法(可以全部都不實現)

2. 委託代理(Delegate)傳值:

它本身是一個設計模式,它的意思是委託別人去做某事。

總結:協議是共同遵守的某種規則或規矩;代理是按照某種協議具體的實現者;

下面引用了部落格園中作者求真求道的部分文章,感覺比較清晰:https://www.cnblogs.com/iyou/p/4939823.html

DaChu.h/** *  下面是聲明協議的固定格式,DaChuDelegate是協議的名稱,因為是代理協議,名稱格式為:類名+Delegate */@protocol DaChuDelegate <NSObject>- (void)doSomethingAftercaiZuohaole;@end@interface DaChu : NSObject/** *  delegate 是dachu類的一個屬性,weak 關鍵字是為了避免循環參考,<DaChuDelegate>表示遵守DaChuDelegate協議 *  更加直白點:在大廚心裡有一個人接受他的菜好了的訊號去做一些事情,具體這個人是誰,大廚不關心,這個人的代號是delegate */@property (nonatomic, weak) id <DaChuDelegate> delegate;- (void)kaiShiZuoCai;@end
Dachu.m#import "DaChu.h"@implementation DaChu- (void)kaiShiZuoCai{    NSLog(@"開始做菜");    sleep(2);    NSLog(@"做好菜了,該上菜了");       //下面這句是判斷 一下delegate是否實現了doSomethingAftercaiZuohaole方法,如果delegate沒有實現    //直接[self.delegate doSomethingAftercaiZuohaole];會crash    if ([self.delegate respondsToSelector:@selector(doSomethingAftercaiZuohaole)]) {        [self.delegate doSomethingAftercaiZuohaole];    }    }@end

下面看一看代理(實現者)這個類裡面的內容:

#import "LaoWang.h"#import "DaChu.h"/** <DaChuDelegate>表示遵守DaChuDelegate協議,並且實現協議裡面的方法 */@interface LaoWang ()<DaChuDelegate>@end@implementation LaoWang- (void)laoWangKaiYe{    NSLog(@"老王開業了");        DaChu *dachu1 = [[DaChu alloc] init];    dachu1.delegate = self;//說明老王充當代理的角色,負責接收菜好了的訊號。    [dachu1 kaiShiZuoCai];//大廚開始做菜}- (void)doSomethingAftercaiZuohaole{    NSLog(@"老王知道了");//這裡可以通知服務員去上菜了}@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.