代理和block的共同特性是回调机制
Block:
1 写法简练,不需要写protocol/函数等、
2 block注重结果的传输
3 代码比较统一
4 block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除;
Delegate
1 delegate运行成本低,只是保存了一个对象指针,直接回调,没有额外消耗。
2 代理的方法比较多,比较分散。
3 代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败
4 “一对一”,对同一个协议,一个对象只能设置一个代理delegate,任何人,任何对象,只要接受,只要允许,只要遵守了相关的协议,TA就可以使用代理。
总结:
公共接口,方法较多也选择用delegate进行解耦。iOS有很多例子比如最常用tableViewDelegate,textViewDelegate德等。
异步和简单的回调用block更好,比如常用的网络库AFNetwork,ASIHTTP库,UIAlertView类。点击事件等、
网友评论