您的位置:首页 > 移动开发 > IOS开发

iOS开发-Delegate 代理 使用和注意事项

2015-11-16 13:56 337 查看
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中定义代理属性
@property (nonatomic, assign)id<EmployeeDelegate> delegate;
一定要用assign,不然会引起循环引用

delegate作用:

B页面Push到A页面后,需要在A页面中传值到B页面,我们可以用Delegate,当然我们还可以用通知和Block
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: