zoukankan      html  css  js  c++  java
  • 关于OC中的block自己的一些理解(一)

    一、关于block

    1、block的作用:保存一段代码。

    2、苹果官方推荐的一种语法,类似于C语言的函数,但是比函数更加灵活。

    3、^是block语法的标识。

    二、block的用法

    1)无返回值无参数

      

     1 - (void)myFirstBlock
     2 {
     3     //1.定义block
     4     void (^myblock)() = ^{
     5         NSLog(@"无参数无返回值");
     6     };
     7     //2.调用block
     8     myblock();
     9     
    10 }

    输出结果:

    2016-02-18 09:56:50.124 01-block[750:25107] 无参数无返回值
    

     2)有参数没有返回值

    - (void)mySecondBlock
    {
        //1.定义block
        void (^mySecondBlock)(int,int) = ^ (int num1,int num2){
            NSLog(@"有参数无返回值:%d",num1 + num2);
        };
        //2.调用block
        mySecondBlock(2,3);
    }
    

     输出结果:

    2016-02-18 10:03:22.221 01-block[811:30160] 有参数无返回值:5
    

     3)有参数有返回值

     1 - (void)myThirdBlock
     2 {
     3     //1.定义block
     4     double (^myThirdBlock)(double,double) = ^ (double r1,double r2){
     5         return r1 + r2;
     6     };
     7     //2.调用block
     8      double r3 = myThirdBlock(1.1,2.2);
     9     NSLog(@"有参数有返回值:%f",r3);
    10 }

    输出结果:

    2016-02-18 10:06:42.615 01-block[861:32505] 有参数有返回值:3.300000

    三、block语法的格式

    四、block的注意点

    1)Block内部可以访问外部变量;

    2)默认情况下,Block内部不能修改外部的局部变量

    3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改

    示例代码如下:

    1 - (void)myFourBlock
    2 {
    3     int num = 5;
    4     void (^myFourBlock)() = ^{
    5     
    6         num = 6;
    7         NSLog(@"%d",num);
    8     };
    9 }

    如果写成上面的代码,Xcode会在第六行“num = 6;”报错:missing __block type specifier;

    修改代码如下:

    - (void)myFourBlock
    {
        __block int num = 5;
        void (^myFourBlock)() = ^{
        
            num = 6;
            NSLog(@"%d",num);
        };
        myFourBlock();
    }

    输出结果:

    2016-02-18 10:25:02.195 01-block[1016:45943] 6

     代码虐我千百遍,我待代码如初恋!

  • 相关阅读:
    搭建一个redis高可用系统
    从“如何设计用户超过1亿的应用”说起----数据库调优实战
    单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
    信息安全系统和安全体系
    敏捷开发系列之旅 第五站(不一样的RUP统一软件开发过程)
    微服务理论与实践(三)-微服务架构的基本能力和优缺点
    学习“CC攻击”
    查看IIS错误日志
    ISNULL函数
    IE6/7下Select控件Display属性无效解决办法
  • 原文地址:https://www.cnblogs.com/fengzhihao/p/5197371.html
Copyright © 2011-2022 走看看