黑马程序员技术交流社区

标题: 终于弄懂block了 [打印本页]

作者: 王振宇351x    时间: 2014-8-22 11:54
标题: 终于弄懂block了
本帖最后由 王振宇351x 于 2014-8-22 11:56 编辑

之前一直弄不懂block的使用,今天终于探索了下,得到了一些结论:block的声明:
int (^myblock)();  // 没有参数.
int (^myblock1)(int); // 有形参.
定义:
int(^myblock)()=^(){
    printf("hehe\n");
    return 1;
};
int(^myblock1)(int)=^(int a){
    printf("hehe%d\n",a);
    return 1;
};
调用
int main(){
  myblock();
  myblock1(5);
  return 0;
}
block也可以作为参数,传给其他函数,如下:  // 这也是我之前添加动画的时候,一直搞不懂的.
void test(void(^block)()){
    printf("hehe1\n");
    block();
    printf("hehe2\n");
}
int main(){
    test(^(){
        printf("hehe3\n");
    });
    return 0;
}
结果是
hehe1
hehe3
hehe2
Program ended with exit code: 0
这个时候,下面的蓝色部分,整个代码块作为test函数的参数.所以,输出的顺序,就可以理解了.
int main(){
    test(^(){
        printf("hehe3\n");
    });
    return 0;
}
另外,如下代码,也是可以的,输出的结果,和上面一样:
void test(void(^block)()){
    printf("hehe1\n");
    block();
    printf("hehe2\n");
}
int main(){
    void (^myblock)() = ^(){
        printf("hehe3\n");
    };
    test(myblock);
    return 0;
}







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