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中实现,否则会报错。

转载于:https://www.cnblogs.com/yapollo/p/5021174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值