1. a.delegate运行成本低。block成本很高的.b.block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除;delegate只是保存了一个对象指针,直接回调,没有额外消耗。相对C的函数指针,只多做了一个查表动作
2.a:写法更简练,不需要写protocol、函数等等.b,block注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息.c,block需要注意防止循环引用:
3.公共接口,方法较多也选择用delegate进行解耦,iOS有很多例子比如最常用tableViewDelegate,textViewDelegate;
异步和简单的回调用block更好,iOS有很多例子比如常用的网络库AFNetwork,ASIHTTP库,UIAlertView类。