
首先我们要先创建一个类,为了方便理解我们就模拟现实生活中的找中介租房子,因此先创建一个Person类
1.在Person.h中定义代理的协议,并完成代理方法声明:代码如下
1 // Person.h文件 2 3 #import <Foundation/Foundation.h> 4 5 @class Person; 6 7 //1 定义代理的协议 8 @PRotocol PersonDelegate <NSObject> 9 10 // 可选方法 11 @optional 12 - (void)personFindHouse:(Person *)person; 13 // 必要方法 14 @required 15 16 @end 17 18 @interface Person : NSObject 19 20 @end
注:代理协议中可选方法可实现可不实现,但必要方法必须实现
2、定义代理属性:代码如下
1 // Person.h文件 2 3 #import <Foundation/Foundation.h> 4 @class Person; 5 //1 定义代理的协议 6 @protocol PersonDelegate <NSObject> 7 // 可选方法 8 @optional 9 - (void)personFindHouse:(Person *)person; 10 // 必要方法 11 @required 12 13 @end 14 15 @interface Person : NSObject 16 @property (nonatomic,copy) NSString *name; 17 //2 定义代理属性 18 @property (nonatomic,weak) id<PersonDelegate> delegate; 19 - (void)zuFang; 20 @end
3、调用代理的方法(通知) 给代理发送消息:代码如下
1 // Person.m文件
2 #import "Person.h"
3
4 @implementation Person
5 - (void)zuFang
6 {
7 NSLog(@"%@--要租房",self.name);
8
9 //3 调用代理的方法(通知) 给代理发送消息
10 if([self.delegate respondsToSelector:@selector(personFindHouse:)])
11 {
12 [self.delegate personFindHouse:self];
13
14 }
15 }
16 @end
上面代码第10行是判断这个对象是否实现了personFindHouse:这个方法
好现在我们需要定义一个ZhongJie类来使用这个代理
1、让这个类遵守代理协议:代码如下
1 // ZhongJie.h文件 2 #import <Foundation/Foundation.h> 3 #import "Person.h" 4 5 @interface ZhongJie : NSObject <PersonDelegate> 6 7 @end
2、实现代理方法:代码如下
1 // ZhongJie.m文件
2 #import "ZhongJie.h"
3
4 @implementation ZhongJie
5
6 - (void)personFindHouse:(Person *)person
7 {
8 NSLog(@"找到房子了 ");
9 }
10
11 @end
3、设置代理属性:代码如下
1 // ViewController.m 文件
2 #import "ViewController.h"
3 #import "Person.h"
4 #import "ZhongJie.h"
5 @interface ViewController ()
6
7 @end
8
9 @implementation ViewController
10
11 - (void)viewDidLoad {
12 [super viewDidLoad];
13 // Do any additional setup after loading the view, typically from a nib.
14 ZhongJie *zj = [[ZhongJie alloc] init];
15
16 Person *p = [[Person alloc] init];
17
18 p.name = @"someOne";
19 //3 设置代理属性
20 p.delegate = zj;
21
22 [p zuFang];
23
24 }
25
26
27 @end
这样我们就创建了代理,并让一个对象使用了这个代理