码迷,mamicode.com
首页 > 其他好文 > 详细

Block & 代理

时间:2015-05-23 01:13:41      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

1. 特点: block 是C语言的,是一种数据类型,可以当做参数来传递(这种用的较多), 也可以当做返回值来用(用的较少),是提前转备好的代码,在需要的时候执行。

 

2.定义,block在定义的时候,要使用copy进行一次拷贝。@property (nonatomic, copy) void (^MyBlock)(NSString *, NSError *);

  返回类型 (^blockName)(参数列表) = ^返回类型 (参数列表) { /// 代码实现; }

 

3.默认情况下,不允许在block内部修改内部变量的指,在外部变量声明时,使用__block 修饰符,则可以在block内部修改变量  

 

4.数组的遍历和排序可以使用block, 遍历: enumerateObjectsUsingBlock: 效率要for 高,苹果官方推荐使用。排序 sortedArrayUsingComparator:

 

5.block和代理的对比: 

  1. block是提前准备好块代码,在需要的时候调用执行,简单,所有的代码在一起,便于阅读和维护, 适合用在回调方法较少的情况, 可以用于线程间的通信。在block中使用self 的时候,需要注意循环引用造成内存泄露的问题。解决的方法是, __Weak  typeof(self)Myself = self, 使用myself来代替self

  2.代理是调用方和被调用方,通过代理协议,来实现代理方法。调用方,1.定义协议,代理方法 2. 定义代理属性,负责执行代理方法的对象,需要使用弱指针,负责会出现循环引用 3.需要的时候,通知代理执行代理方法,需要先判断方法是否实现

  被调用方:1.遵守代理协议 2.设置代理,通知谁去执行代理方法 3.实现代理方法,等待被调用

  代理试用于协议方法很多的场景,如UITableView

Block & 代理

标签:

原文地址:http://www.cnblogs.com/yangzhifan/p/4523512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!