有关Block的语法和其特点,本来是自己在看官方文档并做翻译记录的,但是发现有些地方不能完全理解,而且这样的方式相对耗时。所以,我决定还是聪明点,以后看文档都是用民间翻译版和官方版对照来看,提高学习效率,也让自己对细节深入下去。
概要如下:
Block对象是C级别的语法和运行时特性。它们和标准C函数很类似,但是除了可执行代码外,它们还可能包含了变量自动绑定(栈)或内存托管(堆)。所以一个block维护一个状态集(数据),它们可以在执行的时候用来影响程序行为。 你可以用blocks来编写函数表达式,这些表达式可以作为API使用,或可选的存储,或被多个线程使用。Blocks作为回调特别有用,因为block携带了进行回调所需要的执行代码和执行过程中需要的数据。 Blocks在GCC和Clang里面可用,它附带在Mac OS X v10.6里面的Xcode 开发工具里面。你可以在Mac OS X v10.6及其之后,和iOS 4.0及其之后上面使用blocks。Blocks运行时是开源的,你可以在LLVM’s compiler-rt subproject repository(LLVM的RT编译器的子项目库)里面找到它。Blocks同样作为标准C工作组出现在N1370:Apple’s Extensions to C(该文档同样包括了垃圾回收机制)。因为Objective-C和C++都是从C发展而来,blocks被设计在三种语言上面使用(也包括Objective-C++)。(语法反应了这一目标)
2.1
Block功能
一个block就是一个匿名的内联代码集合体: