最近学习协议的时候被各种遵守协议、实现协议方法等等搞得有点乱,所以把有关协议的东西整理小结如下:
1,A是B的代理,B是A的委托(委托人),比如控制器成为某个view的代理;
2,共同的协议为<BDelegate> ;
3,B将相关数据传值给A,让A来完成操作;
一,对于A:1,遵守协议;2,成为代理;3,实现协议中的方法;
A.m 中
#import “B.h”
@interface A () <BDelegate> // 1,遵守协议
@end
@implementation A
- XX
{
// 2,成为代理
B.delegate = self;
}
// 3,实现代理方法
- (void)b:(B *)b andData:(xx)data{
}
@end
二,对于B:1,创建协议(在协议中定义协议方法,注意@class B.h); 2,创建delegate属性;3,使用代理_delegate来传递值(即,调用代理方法);
B.h 中
@class B.h;
@protocol BDelegate <NSObject>
@required / @optional
- (void)b:(B *)b andData:(xx)data;
@end
@interface B : xx
@property (nonatomic, weak) id<BDelegate> delegate;
@end
B.m 中
@implementation B
- XX{
// 若代理方法为@optonal,则要判断代理方法是否实现了
if( [_delegate respondsToSelector:@selector(b: andData:)] ){
// 3,调用代理方法,实现值传递
[_delegate B:self andData:data];
}
}
三,整个过程就像制造一个只要放入定制规格的炮弹就能开炮的炮弹装置
首先,A从B处拿到制造该炮弹的代理权,声明严格遵守协议规定的炮弹规格来制造相应的炮弹装置;
其次,A开始根据协议制造炮弹装置,把炮弹装置造好,等到B装弹开炮;
然后,B开始使用(调用)A造好的炮弹,将事先商量好的规格炮弹上膛;
最后,上好膛的炮弹装置,放炮!