原文地址数组
1.block的设计初衷是为了方便多核并行运算;函数
2.block能够和GCD配合使用,GCD的API很大程度上基于block,固然也能够脱离block运行,好比传统的函数指针或上下 文指针;但实践证实,当配合block时,GCD很是简单易用,并能发挥其最大能力;(block和dispatch quene)spa
3.若是一方法包含了block的实现部分,而且该实现部分引用了方法中定义的栈变量,block会对该变量进行一次只读拷贝, 而且而后在block中使用该只读拷贝;若是须要同步使用或者修改该变量就应该加上 "__block"来修饰该变量;.net
a)若是该变量是数组,则能够修改,由于数组拷贝的是数组自己;设计
b)对于 static 变量,全局变量,在 block 中是有读写权限的,由于在 block 的内部实现中,拷贝的是指向这些变量的指针。指针
c) __block 变量的内部实现要复杂许多,__block 变量实际上是一个结构体对象,拷贝的是指向该结构体对象的指针。对象
4.内联block和非内联block:非内联指的是block实现部分在调用的方法以外;blog
a)非内联(inline) block 不能直接访问 self,只能经过将 self 看成参数传递到 block 中才能使用,而且此时的 self 只能经过 setter 或 getter 方法访问其属性,不能使用句点式方法。但内联 block 不受此限制。get
b)内联 block 能够直接引用 self,可是要很是当心地在 block 中引用 self。由于在一些内联 block 引用 self,可能会致使循环引用同步