zoukankan      html  css  js  c++  java
  • IOS block学习笔记

    天天看别人的block,各种羡慕嫉妒恨。狠下心来 自己也玩玩block,看看这水深不深。

    Block 声明格式:

        return_type (^block_name)(param_type,param_type,,……)

        例:

               int (^personBlock)(int,int)

    Block 定义格式

        ^return_type (param_type param_name,param_type param_name,……){

      ~~~~

        return return_type;

    }

         例: ^int(int num1,int num2){return num1+num2;}

     

    Block 还有另外一种不同的定义方法。 以 ^ 符号起始,后面跟随着参数,这里的参数必须有参数名, 还必须和它要赋值到的 Block 声明中参数列表里面的参数类型和顺序相匹配。下面是实际的代码。

    示例:^(int num1,int num2){return num1+num2;}

    声明和定义结合起来就是 苹果官方的例子:

     int multiplier = 7;

     int (^myBlock)(int) = ^(int num){

          return num*multiplier;

    }

    此时 multiplier的值是不可变的,如果想在 block里对 multiplier进行改变,则需要 前面加上 __block (两个下划线)

       __block int multiplier = 7;

      int (^myBlock)(int) = ^(int num){

          return num*(++multiplier);

    }

     

    Block 本身的调用方法 与 函数的调用方法基本类似 例 int result= myBlock(4);

    Block 可以直接作为参数传递,就像一个内联函数 

               qsort_b(myCharacters, 3, sizeof(char *), ^(const void *l, const void *r) {

                    char *left = *(char **)l;   

                    char *right = *(char **)r;  

                    return strncmp(left, right, 1);  

                });

    调试:

    你可以在blocks中设断点并单步跟踪. 你也可以在GDB里直接用 invoke-block命令调用blocks,如下所示:

    1. $ invoke-block myBlock 10 20  
    如果要传递C的字符串,你必须用引用括起来, 比如把 this string 传给 doSomethingWithString block, 得这么写:
    1. $ invoke-block doSomethingWithString "\"this string\""  

     

     

     

  • 相关阅读:
    BZOJ 1050 旅行
    BZOJ 1040 骑士
    BZOJ 1038 瞭望塔
    BZOJ 1037 生日聚会
    BZOJ 1823 满汉全席
    BZOJ 3091 城市旅行
    CF702E Analysis of Pathes in Functional Graph
    Luogu 2154 [SDOI2009]虔诚的墓主人
    Luogu 1268 树的重量
    Luogu 4867 Gty的二逼妹子序列
  • 原文地址:https://www.cnblogs.com/superhappy/p/3022151.html
Copyright © 2011-2022 走看看