block、delegate作用:
- 可回调传值
- 使两个类进行交互操作
都可能出现的问题:
都可能出现循环引用,block作为类的属性,被类对象强引用,blck内部又强引用self造成循环引用。
delegate 的修饰属性写成strong和copy也是会造成循环引用,所以要使用weak或者assign
但是相比较而言,delegate比blcok更安全,不容易出现循环引用问题。
block优缺点:
优点:
- 省去了很多delegate 的代码
- 轻量级,本质Oc对象,使用时不怎么定义零时变量,可以截获变量值,获取上下文,而且代码通常写在一个地方,看起来方便。
缺点: - 运行效率低,在开发中,需要把栈上的内容copy 到堆上一份,引用计数器会+1,啥时候为0后才会释放置为nil,
- block循环引用不安全
- 如果一个类要回调3个以上的方法的话,这样用blcok就比较繁琐,不易维护,代码不够美观。
delegate优缺点:
优点:
- delegate相较于blcok循环引用是比较安全的。
- delegate在一个类多种回调内容上,优势就很大了,继承一个协议,可以实现多种方法,在代码维护上也方便,方法分离也比较鲜明。
- delegate效率比blcok高,相当于一个方法的指针,不需要进行运行的消耗
缺点: - 方法声明,继承,实现不在一起,代码寻找比较麻烦,连贯性不好,不易读
- 很多时候是需要再次声明零时变量的
网友评论