iOS代理模式設定方法

來源:互聯網
上載者:User

標籤:

代理模式通常用於解決類似這樣的問題:我們通過介面A開啟了介面B,但在應用進行的過程中,介面B有時候也需要和A主動聯絡,比如點擊某個按鈕時。一個比較好的辦法是,讓A成為B的代理,這樣B就可以在需要的時候給A發送訊息了。

代理模式的一個好處是,B實際上不需要瞭解A的任何事情,只要知道A是自己的代理就可以了。在這種模式下,B依然獨立與A,實現了松耦合。

對象A是對象B的代理,對象B需要向A發送訊息,設定方法分四步:

1、在對象B的.h中定義一個protocol代理協議,並聲明一個協議的屬性變數

2、讓對象B在適當的時候向代理對象A發送訊息,比如觸發按鈕時。

3、讓對象A遵從代理協議

4、通知對象B,現在A是它的代理

分步說明:

1、在B.h中定義代理協議和屬性變數

 1  /*****B.h*****/ 2   3 @protocol BDelegate<NSObject> 4   5 - (void) degegateMethod:(instanceType)instance; 6   7 @end 8   9 @interface B10  11 @property(weak,nonatomic) id<BDelegate> delegate;12  13 @end

2、在B.m中實現B向A發送訊息的方法,以按下done按鈕為例:

 1 /*****B.m******/ 2   3 #import "B.h" 4   5 @interface B() 6    7 @end 8   9 @implementation B10 11 - (IBAction)done:(id)sender{12 [self.delegate delegateMethod:instance];13 }14 15 @end

3、讓A遵從代理協議,在A.h的@interface聲明中增添一個角括弧即可

1 /*****A.h*****/2 3 @interface A<BDelegate>4 5 @end

4、通知對象B,A已經成為它的代理。在A.m中實現代理方法即可

 1 /*****A.m*****/ 2  3 #import "A.h" 4  5 @interface A() 6   7 @end 8  9 @implementation A10 11 - (void)delegateIdentifierMethod:(B *)b{12 //do something;13 B.delegate=self;      //identify the delegate of B is A14 }15  16 - (void)delegateMethod:(instanceType)instance{17 //do something18 }19  20 @end

需要注意的是,在B.h中聲明的代理方法delegateMethod需要在A.m中實現,否則會報錯。

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.