什么是Block

BLOCK是什么?

苹果推荐的类型,效率高,在运行中保存代码。用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行。

  • BOLCK和函数的相似性:

  • 可以保存代码

  • 有返回值

  • 有形参

  • 调用方式一样。

  • block类型:void(^)()

  • Block存储

Block默认存储在栈中,访问了外界的对象,不会对对象retain;如果对block进行一次copy,block就会存储在堆中,访问了外界的对象,会对对象进行retain操作。

Block的定义
  • 注意:
  • 如果block中没有使用外部变量,默认就是全局
  • 如果block中使用了外部变量,就是堆
  • Block可以访问局部变量,但是不能修改。
  • ARC中,默认局部变量是强引用

Block的格式

Snip20160107_17.png

Block定义在函数或方法内

int (^MyDear)(int, int) = ^(int a, int
b) {
return a+b;
};
```
定义了一个叫MyDear的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现。

######block循环引用问题

- block尽量少使用self
- block尽量少使用下划线(_)直接访问成员属性
- 要避免强引用到self的话,用__weak把self重新引用一下就行

推荐阅读更多精彩内容