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\""  

 

 

 

 

 

转载于:https://www.cnblogs.com/superhappy/archive/2013/04/15/3022151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值