iOS开发-Delegate 代理 使用和注意事项
2015-11-16 13:56
337 查看
1.设想:设想员工类,员工做什么事情需要给老板进行汇报,所以在员工类Employee中进行设置Delegate来反馈给老板事情进展情况,Employee类具体代码如下:
Employee.h代码如下
Employee.m代码如下:
我们让Boss类作为Employ类的代理,Boss.h代码如下:
写一个delegate的步骤
定义代理协议
定义代理方法
定义代理属性
在接受这个代理类中实现这些代理方法,设置为delegate
注意事项:
定义代理方法的时候有两个属性@property,@request ,@property是可选的,@request是必须要写的.默认是@property.
我们在Employee.h中定义代理属性
delegate作用:
B页面Push到A页面后,需要在A页面中传值到B页面,我们可以用Delegate,当然我们还可以用通知和Block
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; @endBoss.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
相关文章推荐
- iOS代码格式
- 常用宏定义iOS
- iOS Provisioning Profile(Certificate)与Code Signing详解
- iOS中GIF的制作的简单版本记录
- iOS 富文本
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
- iOS 实现多个按钮,点选一个其它都取消选中状态的最佳方法
- IOS基础 - 模态跳转方式
- IOS开发的报错(异常)信
- iOS菜鸟之FMDB的二次封装简单易用
- Xcode7.1与iOS9之坑 (持续更新)
- iOS开发框架篇—CoreImage
- iOS 定时器(NSTimer)的使用
- iOS开发指令篇—__weak修饰符详解
- 关于iOS 'The sandbox is not sync with the Podfile.lock'问题解决方法
- ios开发使用lipo命令合并真机库和模拟器库
- iOS应用性能优化的25个建议
- iOS实现倒计时
- Sara小妹开始入门iOS开发
- IOS解析XML