美文网首页iOS开发学习
Objective-C block块与函数指针

Objective-C block块与函数指针

作者: iOS开发攻城狮 | 来源:发表于2017-04-13 15:46 被阅读70次

    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开发上的问题不懂或者需要视频教程可以看我的个人简介。

    不定时更新中。

    相关文章

      网友评论

        本文标题:Objective-C block块与函数指针

        本文链接:https://www.haomeiwen.com/subject/tobbattx.html