关于Block的个人总结

原文地址


1.block的设计初衷是为了方便多核并行运算;

2.block可以和GCD配合使用,GCD的API很大程度上基于block,当然也可以脱离block运行,比如传统的函数指针或上下        文指针;但实践证明,当配合block时,GCD非常简单易用,并能发挥其最大能力;(block和dispatch quene)

3.如果一方法包含了block的实现部分,并且该实现部分引用了方法中定义的栈变量,block会对该变量进行一次只读拷贝,        并且然后在block中使用该只读拷贝;如果需要同步使用或者修改该变量就应该加上 "__block"来修饰该变量;

    a)如果该变量是数组,则可以修改,因为数组拷贝的是数组本身;

    b)对于 static 变量,全局变量,在 block 中是有读写权限的,因为在 block 的内部实现中,拷贝的是指向这些变量的指针。

    c) __block 变量的内部实现要复杂许多,__block 变量其实是一个结构体对象,拷贝的是指向该结构体对象的指针。

4.内联block和非内联block:非内联指的是block实现部分在调用的方法之外;

    a)非内联(inline) block 不能直接访问 self,只能通过将 self 当作参数传递到 block 中才能使用,并且此时的 self 只能通过 setter 或 getter 方法访问其属性,不能使用句点式方法。但内联 block 不受此限制。

    b)内联 block 可以直接引用 self,但是要非常小心地在 block 中引用 self。因为在一些内联 block 引用 self,可能会导致循环引用


你可能感兴趣的:(关于Block的个人总结)