iOS开发学习42 委托和协议
一、概念
- 协议 ,在iOS开发时用来定义一个虚拟的接口,只有接口定义,不包含实现。
- 代理者:实现协议的某个方法。
- 委托者:用自己的方法制定要实现协议的方法的对象。
二、使用
1. 创建protocol
@protocol关键字声明一个协议,协议包含两个对象:代理者、委托者。
protocol不是类,定义与类的定义有所不同。
myprotocol.h
@protocol myprotocol <NSObject>
@required
-(void)callback:(int)parameter;
@end
在协议定义的callback,后面会用它来实现回调函数的功能。
协议的定义不需要 .m
文件。
2. 创建类B,运行回调函数
ClassB.h
@interface ClassB : NSObject{
id<myprotocol>delegate;
}
@property (nonatomic, retain) id<myprotocol>delegate;
-(void)test;
@end
ClassB.m
@implementation ClassB
@synthesize delegate; //delegate将赋值为classA
-(void)test{
[self.delegate callback]; //调用classA的callback回调函数
}
@end
3. 类A遵守协议,实现回调函数
ClassA.h
@interface ClassA : UITableViewController<myprotocol>
@end
ClassA.m
@implementation ClassA
///类A必须实现协议定义的callback
-(void)callback:(int)parameter{
NSLog(@"callback ClassA");
}
-(void)ClassA{
ClassB *classB = [[classB alloc] init];
classB.delegate = self; //这一句是关键
[classB test]; //调用classB的test,在test里回调ClassA的callback函数
}
@end