Objective-C block块与函数指针

block代码块

代码块对象简称为”代码块”,是对 C语言中函数的扩展.运行在 iOS4.0和 OS X 10.6版本以上

代码块实际上是由 C语言实现的,所以在各种以 C 作为基础的语言内都是有效地,其中包括: Objective-C,C++以及 Objective-C++.

代码块不属于 ANSI 的 C语言标准,但是关于代码块的提议已经提交给了美国标准委员会审议.

代码块本质上是和其他变量相似.不同的是,代码块储存的数据是一个函数体.使用代码块时,可以像调用其他标准函数一样,传入参数,并且得到返回值.

因为其定义、调用用法与函数指针基本相似,所以先复习下函数指针的用法

函数指针的语法格式


其中,按照左右法则,先看括号中的未标示的字符, pMyFunction, 其前面有一个*,说明其实一个指针,再往右看是一个括号,则说明其是一个函数指针,名字是 pMyFunction, 后面的参数为空,前面的返回值亦为空.

接下来在 X-Code 中写一个例子来帮助大家理解


Objective-C block块与函数指针_第1张图片

代码块的语法格式

与函数指针类似,主要区别就是*换成了^,而且 block块中还有代码片段,掉用方式基本同函数指针相似.


举一个简单的例子


Objective-C block块与函数指针_第2张图片

结果是打印出 I am a block

与函数指针对比一下, 其调用方法都几乎是一样的,改变的是*号变成了^,也就是脱字号,其返回值还可以省略,只不过代码块中的是一段代码而已,可以是一个函数.

再来一个例子,输入几个人的名字,实现名字的排序功能,其主代码如下


Objective-C block块与函数指针_第3张图片

其结果是: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

)

代码块的变量

关于代码块局部变量


Objective-C block块与函数指针_第4张图片

关于代码块的全局变量


Objective-C block块与函数指针_第5张图片

代码一开头就是用了 typedef, 声明了一个block块的类型,类型的名称是:blockType**

以后如果想声明一个block对象用于返回类型是整型,有一个整型参数的block块的时候, 可以使用blockType类型来声明

关于修改代码块外部变量

如果想修改代码块外部的局部变量, 需要在声明这个变量的时候, 用__block来修饰


Objective-C block块与函数指针_第6张图片

__ block修饰的代码块的局部变量是可以修改的,对于 block 来说, result 是一个外部变量,原先的值是100,用__block修饰后,在块的代码中修改 result 的值为20 ,输出的结果: after modify the int result with __block int result:400

下图为今年部分iOS开发的视频教程,因为不定时更新中故不做多的截图,如果有iOS开发上的问题不懂或者需要视频教程可以看我的个人简介。

不定时更新中。

你可能感兴趣的:(Objective-C block块与函数指针)