1.设想:设想员工类,员工做什么事情需要给老板进行汇报,所以在员工类Employee中进行设置Delegate来反馈给老板事情进展情况,Employee类具体代码如下:
Employee.h代码如下
//
// Employee.h
// Delegate
//
// Created by rongxun02 on 15/11/16.
// Copyright © 2015年 DongZe. All rights reserved.
//
#import <Foundation/Foundation.h>
/*
1.定义代理协议
2.定义代理方法
3.定义代理属性
4.在别的类中实现delegate方法
*/
@protocol EmployeeDelegate <NSObject>
//@property
@required
- (void)taskSuccessful:(NSString *)contents;
- (void)taskFailure:(NSString *)reason;
- (void)tasking:(NSString *)contens;
@end
@interface Employee : NSObject
@property (nonatomic, assign)id<EmployeeDelegate> delegate;
- (void)startTask;
@end
Employee.m代码如下:
//
// Employee.m
// Delegate
//
// Created by rongxun02 on 15/11/16.
// Copyright © 2015年 DongZe. All rights reserved.
//
#import "Employee.h"
@implementation Employee
- (void)startTask {
[_delegate taskSuccessful:@"代理执行任务反馈..."];
}
@end
我们让Boss类作为Employ类的代理,Boss.h代码如下:
//
// Boss.h
// Delegate
//
// Created by rongxun02 on 15/11/16.
// Copyright © 2015年 DongZe. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Employee.h"
@interface Boss : NSObject<EmployeeDelegate>
@property (nonatomic, strong)Employee *employee;
- (void)startTask;
@end
Boss.m代码如下:
//
// Boss.m
// Delegate
//
// Created by rongxun02 on 15/11/16.
// Copyright © 2015年 DongZe. All rights reserved.
//
#import "Boss.h"
#import "Employee.h"
@implementation Boss
- (void)dealloc {
_employee.delegate = nil;
}
- (void)startTask {
self.employee = [[Employee alloc] init];
_employee.delegate = self;
}
- (void)taskSuccessful:(NSString *)contents {
NSLog(@"%@", contents);
}
- (void)taskFailure:(NSString *)reason {
NSLog(@"%@", reason);
}
- (void)tasking:(NSString *)contens {
NSLog(@"%@", contens);
}
@end
然后我们在ViewController中进行调用,代码如下
self.boss = [[Boss alloc] init];
[_boss startTask];
[_boss.employee startTask];
写一个delegate的步骤
- 定义代理协议
- 定义代理方法
- 定义代理属性
- 在接受这个代理类中实现这些代理方法,设置为delegate
注意事项:
- 定义代理方法的时候有两个属性@property,@request ,@property是可选的,@request是必须要写的.默认是@property.
- 我们在Employee.h中定义代理属性
一定要用assign,不然会引起循环引用@property (nonatomic, assign)id<EmployeeDelegate> delegate;
delegate作用:
- B页面Push到A页面后,需要在A页面中传值到B页面,我们可以用Delegate,当然我们还可以用通知和Block