1.对于 block 以外的 变量,如果把它放在了block内进行访问(或者赋值),一旦进入block体中
(1).基本类型变量会被block进行一次copy后以一个临时变量存放在block体中
(2).指针变量会被block进行一次的retain后以一个临时变量存放
无论是基础类型数据还是指针,被block使用了,就表明它的生命周期除了自己本身所在的作用域,又多出一个block体的作用域
2.当一个变量被__block修饰,block体中就会知道,即使block使用这个 外部变量,也不会进行retain或copy (非arc)
当一个变量被__weak修饰,block体中就会知道,即使block使用这个 外部变量,也不会进行retain或copy (arc)
3.如果block是作为一个类的成员对象存在的,那么block体中最好不要直接对于此类的其他成员变量进行使用,因为block一旦发现体内存在类的其他成员变量,就会对类的对象self进行retain。这样的话,包括self自己创建出来的那次引用计数,self就同时被引用计数2次,可能造成强引用的循环而无法真正释放类的对象
如果要使用的话,用2中方法
4. 使用block是要注意,若将block做函数参数时,需要把它放到最后