iOS设计模式之自己设计与实现委托与协议

协议是一组方法的集合。 委托依赖协议来实现。一般为委托来提供服务的协议我们的命名规则都是 类名Delegate.其中类名实际隐含了表示了delegating的名字。也就是需要委托者帮组的类。比如UITableViewDelegate协议。我们往往使用系统给我们写好的委托和协议。其中自己手写实现一个委托并不困难。

比如一个控制器A需要其他控制器的帮助来实现对控制器A上的视图来配置。那么需要为控制器A代码实现如下。

iOS设计模式之自己设计与实现委托与协议
#import <UIKit/UIkit.h>
1 @protocol ADelegate;
@interface A : UIViewController
2 @propety (weak, nonatomic) id<ADelegate> delegate;
@end

3 @protocol  ADelegate <NSObject>
- (void)helpMeConfigTheView :(id)UIViewController;
@end
iOS设计模式之自己设计与实现委托与协议

 

添加下划线部分。其中1是一个前置声明。1的存在保证2不会编译错误。也就是保证2中的ADlegate能够被编译器识别。3就是协议声明。

这里我们可以注意一下几点。 委托变量的声明一般是id<委托协议名>  属性类型一般是weak。很显然weak表示这个delegating类不能有保证委托类的生存周期。这在现实中也有映射的。 就好像你的朋友何时挂与你无关。

3 是协议声明。一般协议都有继承NSObject协议。注意这里NSObject是协议名而不是类名。凡是用<>中的都是协议。这里也很好理解。这就好像一个书名号而已。协议就像我们现实生活中的协议书。

在实现文件中。

@implemtation A

.....

在ADelegate中的某个消息实现中。

self.delegate = bController ; (其中bController表示另外一个控制器对象)

[self.delegate helpMeConfigTheView:self];

@end

就可以完成做为delegating的所有代码。

 

delegate中不用多说

1. 在声明文件中

@interface B: UIViewController<ADelegate>

2.在实现文件中

- (void)helpMeConfigTheView :(id)UIViewController
{
.....
}

 

 

 

 

 

 

 

 

iOS设计模式之自己设计与实现委托与协议

上一篇:Bertelsmann Asia Investments, 简称BAI


下一篇:鸟哥的Linux私房菜.基础学习篇(摘要)