zoukankan      html  css  js  c++  java
  • block的简单介绍

    block作为OC中经常使用的代码块,现在在越来越多的地方被使用。她类似于函数,又比函数更灵活。函数在编译前就已经确定了,但是block的代码块确是不确定的,block还有个特点就是可以作为方法的参数被使用,可以跨页面传值,在实际开发中,充当了很多代理的功能。

    1.block的定义

    第一种:(直接写)

    @property (copy) void(^MyBlock)(void); 

    第二种:(typedef)

    typedef void(^MyBlock)(void); 

    @property (nonatomic, copy) MyBlock block;

    常规定义如下

      int (^myblock)(int) = ^(int num){

      return num * 7;

      };

       调用的时候

      int result = myblock(8);

      

    2.block传参

      block不能改变传入block中的参数的值,真正传给block的只是参数的副本     

    int a = 10;
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            int b = 10;
            void (^blocktest)(int,int) = ^(int a,int b){
                a++;
                b++;
                NSLog(@"block a=%d,b=%d",a,b);
            };
            blocktest(a,b);
            NSLog(@"main a=%d,b=%d",a,b);
            return 0;
        }
    }

    打印结果

     block a=11,b=11

     main a=10,b=10

    3.block 的作用域

          block可以使用和改变全局变量,而不能使用和改变局部变量,除非在局部变量前加__block修饰

     

    int a = 10;
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            __block int b = 10;
            void (^blocktest)() = ^(){
                a++;
                b++;
                NSLog(@"a=%d,b=%d",a,b);
            };
            blocktest();
            NSLog(@"a=%d,b=%d",a,b);
            return 0;
        }
    }

    打印结果

    a=11,b=11

     a=11,b=11

  • 相关阅读:
    Redis
    多线程相关
    selenium操作浏览器的基本方法
    selenium之 webdriver与三大浏览器版本映射表(更新至v2.29)
    selenium安装及官方文档
    Python(3)_python对Json进行操作
    python类中的self参数和cls参数
    python3中shuffle函数
    Python3中assert断言
    python2和python3中range的区别
  • 原文地址:https://www.cnblogs.com/mengdaxia117/p/5222757.html
Copyright © 2011-2022 走看看