Block分析
2016-12-21许莉鑫金海佳李玛田英爱
许莉鑫 金海佳 李玛 田英爱
北京信息科技大学计算机学院
Block分析
许莉鑫 金海佳 李玛 田英爱
北京信息科技大学计算机学院
Block是苹果公司在iOS4后引入的对C语言的扩展。把Block的功能概括来说,即带有自动变量(即局部变量)的匿名函数指针。本文将对Block在这几个方面进行解读:一、Block的语法。二、Block作为函数参数使用的方法。三、Block对自动变量的截获。四、__Block说明符、存储域。五、循环引用导致内存泄漏的问题。本文旨在使阅读者深入认识Block并更好地使用Block。
Block Objective-C iOS
1 引言
在编程中闭包是非常常见的一种技术手段,在Objective-C中被称做Block。Block因其简洁的语法,特殊的存储方式,被广泛地使用在Objective-C工程中。很好地使用Block并不简单,本文将针对Block进行深入分析。
Block本质是一个函数指针,它的使用方法和C语言函数指针一样,可以传入参数,且有返回值。但和函数指针相比,Block功能更强大,所以Block也复杂很多,它与函数指针的区别主要表现在以下方面:语法上存在区别、Block是一个匿名指针、Block会截获自动变量、内存管理与释放的区别。
2 Block语法
2.1 声明Block
在C语言中,可以将一个函数的地址赋值给函数指针类型变量中,形式如:
int functionName(int count){
return count;

因为Block本质是一个匿名函数指针,所以声明一个Block和C语言中声明函数指针十分类似,形式如:

与C语言中声明函数指针相比,声明Block的区别即将“*”替换成。
Block类型变量和一般的C语言变量的使用方法完全相同,它可作为自动变量、函数参数、静态变量、静态全局变量、全局变量等使用。
2.2 对Block赋值
形式如:

“^”符号表明这是一个Block,“^”后的括号中包含着参数,花括号中可以进行一些操作,并根据需要在确定时候返回。……
