delegate,block,notification三者区别
2016-05-19 18:50
176 查看
通知:“一对多”,在APP中,很多控制器都需要知道一个事件,应该用通知;
delegate:
1,“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;
2,代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败
block:
1:写法更简练,不需要写protocol、函数等等
2,block注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息
3,block需要注意防止循环引用:
ARC下这样防止:
__weak typeof(self) weakSelf = self;
[yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
[weakSelf doSomething];
}];
非ARC
__block typeof(self) weakSelf = self;
[yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
[weakSelf doSomething];
}];
delegate:
1,“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;
2,代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败
block:
1:写法更简练,不需要写protocol、函数等等
2,block注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息
3,block需要注意防止循环引用:
ARC下这样防止:
__weak typeof(self) weakSelf = self;
[yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
[weakSelf doSomething];
}];
非ARC
__block typeof(self) weakSelf = self;
[yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
[weakSelf doSomething];
}];
相关文章推荐
- .NET Core R2
- Java问题总结33之利用UUID生成全局唯一码(Scala环境运行)
- Scala Standard Library API(01) -- scala.Any
- 单例
- Eclipse中设置作者,日期,版本等信息
- Redis+Spring缓存实例
- JSP的动作元素
- 第九次会议
- 基础总结篇之六:ContentProvider之读写联系人
- CSS中position的absolute如何相对于父元素的位置进行定位
- hdoj 1002 A + B Problem II 【大数A+B】
- 56.把二叉树打印成多行
- jquery效果-淡入与淡出效果
- Java操作Excel文件导入
- 计算机程序的构造和解释 练习 1.11
- UVA - 11059 Maximum Product
- Python测试框架doctest
- JVM性能监控工具(一)-jdk命令行工具
- spring boot 快速搭建 基于 Restful 风格的微服务
- Java集合相关面试问题和答案