• 关于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

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

  • 相关阅读:
    百度PaddlePaddle入门-14(多个CPU加速训练)
    Quantum Hierarchical State Machine (量子层级状态机)
    百度PaddlePaddle入门-13(网络优化)
    MachineLearning入门-9(数据准备)
    百度PaddlePaddle入门-12(损失函数)
    MachineLearning入门-8(数据可视化)
    百度PaddlePaddle入门-11(网络结构)
    页面生命周期
    JS控制开灯关灯
    JavaScript基础知识
  • 原文地址:https://www.cnblogs.com/fengzhihao/p/5197371.html
Copyright © 2020-2023  润新知