手写代理
来源:互联网 发布:淘宝店铺怎么装修的 编辑:程序博客网 时间:2024/04/29 18:38
凡是代理,必须有代理对象和被代理对象。举一个Baby和Nurse的例子。Baby是被代理对象,Nurse是代理对象。被代理对象做三件事情:
1.规定要实现的方法,声明协议(需要传入一个参数,即被代理对象);
2.提供一个代理属性;
3.声明一个方法,该方法被代理对象所监听,当实现这个方法的时候,促使代理对象履行协议规定的方法。
同时,代理对象要做三件事:
1.遵循协议;
2.设置代理;
3.实现方法。
如下所示:
在文件 Baby.h 里:
1.声明协议
#import <Foundation/Foundation.h>
@class Baby;(告诉编译器“Baby”是一个类)
@protocol BabyDelegate (协议的写法一般是 类型+delegate)<NSObject>
-(void)babyCryPlayWithHim:(Baby*)baby;
@end
@interface Baby:NSObject
2.提供一个代理属性
@property(nonatomic,weak)id<BabyDelegate>delegate
3.声明一个方法,该方法被代理对象所监听,当实现这个方法的时候,促使代理对象履行协议规定的方法
-(void)babyCry;
@end
在文件 Baby.m里:
#import "Baby.h"
@implementation Baby
-(void)babyCry{
NSLog(@"baby哭了");
[self.delegate babyCryPlayWithHim:self];
}
@end
在文件 Nurse.h 里:
#import <Foundation/Foundation.h>
#import "Baby.h"
@interface Nurse:NSObject<BabyDelegate>(遵循协议)
@end
在文件 Nurse.m里:
#import "Nurse.h"
@implementation Nurse
-(void)babyCryPlayWithHim:(Baby*)baby{
NSLog(@"我和baby玩耍");
}
@end
在 main.m里:
#import<Foundation/Foundation.h>
#import "Baby.h"
#import "Nurse.h"
int main(int argc, const char * argv[ ] {
@autoreleasepool{
创建对象
Baby* baby=[[Baby alloc] init];
Nurse* nurse=[[Nurse alloc] init];
baby.delegate=nurse;(设置代理)
[baby babyCry];(baby实现方法,此时将促使代理对象履行协议)
}
return 0;
}
- 手写代理
- java 手写动态代理
- 手写代理和单例
- 手写事件模型及事件代理/委托
- 手写
- java面试题答疑(手写arraylist、进制转换、多线程、动态代理)
- 1.事件委托的原理以及优缺点 2. 手写原生js实现事件代理,并要求兼容浏览器
- 1.事件委托的原理以及优缺点 2. 手写原生js实现事件代理,并要求兼容浏览器
- 手写打印机
- penpower手写
- 手写ajax
- 手写日记
- 手写视图
- DataSet手写
- 手写 ajax
- android 手写
- 手写Ajax
- 手写yueshu
- eclipse .vm文件问题
- 图像的近邻、双线性、三次内插法介绍
- android4.0 USB Camera实例(一)JNI层
- webdriver源码分析
- Data Vault初探(四) —— 初始装载
- 手写代理
- 移动端响应式布局通用代码
- 【Java并发编程实战】—–CAS操作
- Base64 js demo 支持中文
- STM32学习笔记(2):USART
- android studio一些有用的快捷键
- Delphi 3种获取网页源代码实例。
- The project type is not supported by this installation 尚未解决
- Linux 查看端口命令