协议是一组方法的集合。 委托依赖协议来实现。一般为委托来提供服务的协议我们的命名规则都是 类名Delegate.其中类名实际隐含了表示了delegating的名字。也就是需要委托者帮组的类。比如UITableViewDelegate协议。我们往往使用系统给我们写好的委托和协议。其中自己手写实现一个委托并不困难。
比如一个控制器A需要其他控制器的帮助来实现对控制器A上的视图来配置。那么需要为控制器A代码实现如下。
#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
添加下划线部分。其中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
{
.....
}