iOS代理模式設置方法


代理模式通常用於解決類似這樣的問題:我們通過界面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 B
10  
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 B
10 
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 A
10 
11 - (void)delegateIdentifierMethod:(B *)b{
12 //do something;
13 B.delegate=self;      //identify the delegate of B is A
14 }
15  
16 - (void)delegateMethod:(instanceType)instance{
17 //do something
18 }
19  
20 @end

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM