黑马程序员技术交流社区

标题: block问题 [打印本页]

作者: 李烨    时间: 2014-4-18 09:05
标题: block问题
本帖最后由 李烨 于 2014-4-19 10:18 编辑
  1.     void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger index, BOOL *stop)
  2. {

  3. }
复制代码

这个函数中的 ^ 是名称还是有别的含义? = 后面又是什么意思? 求解读
作者: 微尘•逐梦    时间: 2014-4-18 09:42
这个^就是block的标志,与指向函数的指针中的*用法一样,等号后面的^就是把后面的代码用block包装起来的意思。
作者: D调的沉默    时间: 2014-4-18 10:12
本帖最后由 D调的沉默 于 2014-4-18 10:15 编辑

我给你拿一段简单的,让你理解下吧
Blocks的定义:
int (^MySum)(int, int) = ^(int a, int b) {
        return a+b;
};
^是block的标识符,这段代码定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现。
   它的用法和指向函数的指针一样,而且比较类似。
定义函数指针
int (*myFn)();

定义Blocks
int (^MyBlocks)(int,int);

解释的很详细,应该明白了吧。。接着给你补充一下你这个应该是遍历NSarry对象数组用的,每次NSarry都会向block中传入一个对象,,id obj是接受这个对象的,index是判断传入第几个对象的,而bool *stop使用来控制是否停止传入的,可以通过在外部定义一个bool来控制
作者: Er01c    时间: 2014-4-18 10:26
^ 是block代码块的标志,block代码块用来封装一段代码,返回值、形参可选

= 后面 ^(id obj, NSUInteger idx, BOOL *stop) 中的obj(对象) , idx(索引), stop(控制标识)是形参

作者: 李烨    时间: 2014-4-18 11:00
D调的沉默 发表于 2014-4-18 10:12
我给你拿一段简单的,让你理解下吧
Blocks的定义:
int (^MySum)(int, int) = ^(int a, int b) {

:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2