BLOCK是什么?
苹果推荐的类型,效率高,在运行中保存代码。用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行。
BOLCK和函数的相似性:
可以保存代码
有返回值
有形参
调用方式一样。
block类型:void(^)()
Block存储
Block默认存储在栈中,访问了外界的对象,不会对对象retain;如果对block进行一次copy,block就会存储在堆中,访问了外界的对象,会对对象进行retain操作。
Block的定义
- 注意:
- 如果block中没有使用外部变量,默认就是全局
- 如果block中使用了外部变量,就是堆
- Block可以访问局部变量,但是不能修改。
- ARC中,默认局部变量是强引用
Block的格式
Block定义在函数或方法内
int (^MyDear)(int, int) = ^(int a, int
b) {
return a+b;
};
```
定义了一个叫MyDear的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现。
######block循环引用问题
- block尽量少使用self
- block尽量少使用下划线(_)直接访问成员属性
- 要避免强引用到self的话,用__weak把self重新引用一下就行