block代码块
代码块对象简称为”代码块”,是对 C语言中函数的扩展.运行在 iOS4.0和 OS X 10.6版本以上
代码块实际上是由 C语言实现的,所以在各种以 C 作为基础的语言内都是有效地,其中包括: Objective-C,C++以及 Objective-C++.
代码块不属于 ANSI 的 C语言标准,但是关于代码块的提议已经提交给了美国标准委员会审议.
代码块本质上是和其他变量相似.不同的是,代码块储存的数据是一个函数体.使用代码块时,可以像调用其他标准函数一样,传入参数,并且得到返回值.
因为其定义、调用用法与函数指针基本相似,所以先复习下函数指针的用法
函数指针的语法格式
其中,按照左右法则,先看括号中的未标示的字符, pMyFunction, 其前面有一个*,说明其实一个指针,再往右看是一个括号,则说明其是一个函数指针,名字是 pMyFunction, 后面的参数为空,前面的返回值亦为空.
接下来在 X-Code 中写一个例子来帮助大家理解
代码块的语法格式
与函数指针类似,主要区别就是*换成了^,而且 block块中还有代码片段,掉用方式基本同函数指针相似.
举一个简单的例子
结果是打印出 I am a block
与函数指针对比一下, 其调用方法都几乎是一样的,改变的是*号变成了^,也就是脱字号,其返回值还可以省略,只不过代码块中的是一段代码而已,可以是一个函数.
再来一个例子,输入几个人的名字,实现名字的排序功能,其主代码如下
其结果是:unsorted array info:(
ZhangSan,
LiSi,
WangWu,
ZhaoLiu,
MaQi
)
2015-06-27 22:03:52.107 BlocksDemo[2990:1834086] sorted students info:(
LiSi,
MaQi,
WangWu,
ZhangSan,
ZhaoLiu
)
代码块的变量
关于代码块局部变量
关于代码块的全局变量
代码一开头就是用了 typedef, 声明了一个block块的类型,类型的名称是:blockType**
以后如果想声明一个block对象用于返回类型是整型,有一个整型参数的block块的时候, 可以使用blockType类型来声明
关于修改代码块外部变量
如果想修改代码块外部的局部变量, 需要在声明这个变量的时候, 用__block来修饰
用__ block修饰的代码块的局部变量是可以修改的,对于 block 来说, result 是一个外部变量,原先的值是100,用__block修饰后,在块的代码中修改 result 的值为20 ,输出的结果: after modify the int result with __block int result:400
下图为今年部分iOS开发的视频教程,因为不定时更新中故不做多的截图,如果有iOS开发上的问题不懂或者需要视频教程可以看我的个人简介。
不定时更新中。