楼上,我的名字都写不对么?
如果这个翻译对的话,楼主就问了一个毫无意义的问题,在什么情况下,你需要区分block和delegation protocol?这两个有啥可区分的?完全不同啊?
我很奇怪你问问题的方式,我们不应该先弄明白一个东西是什么,然后谈怎么跟别的东西区分么?具体到这两个东西,只要有点明白,就区分开了,因为完全没有关系啊。
我其实之前写过类似思路的东西,所以搬过来。
调了一整天关于block的bug,终于窥探到了一些GCD, Block,ARC的关系,简单来说,为了iOS的用户界面更加流畅,苹果推出了更加底层的GCD,GCD是更加底层的C级别接口,为了实现回调,且为了与Obj-C代码更加兼容,自然也提出了类似于C语言函数指针而非函数指针的Block,但是gcd线程结束的不确定性,使block在异步调用时内存管理逻辑会非常复杂,从这个角度来说,苹果又为clang编译器推出了ARC,让编译器帮助你管理各种release;另一方面,也降低了很多初学者的学习成本与门槛,一箭N雕。
你去看看12年还是11年的WWDC有一个session介绍ARC的,当时在讲block编程的时候就演示了一个例子,说明block的内存管理有时候会异常复杂,犯错的概率也非常高。所以我的结论是,用block,就用ARC。