zoukankan      html  css  js  c++  java
  • 代码块(block)简介

    代码块是对C语言中函数的扩展,由C语言实现,所以在以C为基础的语言内都是有效的,包括Objective_C,C++和Objective-C++,在Xcode的GCG与Clang工具中是有效的,但这不属于ANSI的C语言标准。
     
    代码块借鉴了函数指针的语法,所以声明方法与之类似。如:
    函数指针:void *(my_func)(void){/*放代码*/};
    只要把“*”替换成"^"(幂符号)就可以把它转换成一个代码块的定义了。如:
    代码块:void ^(my_block)(void){/*放代码*/};
     
    使用例子:
    int (^square_block)(int num) = ^(int num){return (num*num);};//注意分号
    获取整形参数并返回了这个数字的平方。前面是定义,后面是参数列表与实现内容。
     
    1 代码块使用
    如果你将代码块声明为变量,就可以像函数一样使用它了。
    int result = square_block(5);//幂符号在定义时才用一下
    2 可以使用typedef来简化类型声明
    typedef double (^BlockRef)(double c,double d);
     
    BlockRef blockRef1 = ^(double c,double d){return c*d;};
    NSLog(@“%d,%d”,blockRef1(2,4),blockRef1(4,5));
     
    3 代码块与变量
    本地变量是与代码块一周一范围的内声明的变量。本地变量会被代码块作为常量获取到。所以要修改本地变量的值,必须将它们声明为可以修改的。
    错误例子:
    double c = 3;
    BlockRef1 block1 = ^(double a,double b){c = a*b;};
    编译器会报错:Variable is not assignable (missing __block type specifier)
    解决方法只需要在double c = 3;前加一个__block就可以了。(又下划线哦)
    注:有些变量是无法声明为__block类型的。(1)可变长度的数组 (2)包含可变长度数组与结构体
     
    代码块的内存管理需要专门关注一下,这里不表。
     
    参考:《objective-C基础教程》第2版
  • 相关阅读:
    OpenCV中 常用 函数 的作用
    OpenCV中Mat的使用
    awk --- 常用技巧
    Specify 的含义 ------ 转载
    关于CPU CACHE工作机制的学习
    关于CPU Cache -- 程序猿需要知道的那些事
    ARM920T的Cache
    Learn Git and GitHub
    朴素贝叶斯分类器(MNIST数据集)
    k-近邻算法(KNN)识别手写数字
  • 原文地址:https://www.cnblogs.com/qq411715078/p/5126491.html
Copyright © 2011-2022 走看看