zoukankan      html  css  js  c++  java
  • IOS Block-Block块的使用与理解

         在IOS中,block块是新添加的语法,其他程序语言中也被称为闭包。

         程序块的理念是像任何其他C语言类型一样对待特定的代码块。程序块可以分配给一个变量,以参数的形式传递给函数或方法,当然也可以执行(不同于其他大部分类型)。通过这种方式,程序块可替代Object-C中的委托模式或C中的回调函数。

         跟方法或函数很想,程序块可以接受一个或多个参数并指定一个返回值。要声明程序块变量,可以使用“^”符号以及其他一些放在圆括号内的代码来声明参数和返回类型。要定义程序块本身,执行的操作大体相同,但要在后面添加定义程序块的实际代码。

         例子(创建block、赋值block、调用block):(这里的block例子没有返回值)

    //声明一个块变量myBlock,这个块参数没有返回值
    void(^myBlock)(void);
    
    //声明完之后,对myBlock赋值
    myBlock = ^{NSLog(@"This is my block!")}
    
    //声明完之后,我们执行这个块函数(就像调用函数一样调用)
    myBlock();

        

         程序块可以访问在创建它的范围内所有可用的变量。在默认情况下,程序块通过这种方式获取了你要访问的变量,将值复制到一个新的同名变量中,保留原始变量不变。在block块中使用外部变量,如果外部变量是局部变量,要在这个变量声明前加__block。

         不同作用域变量对于block赋值不同。如果是局部变量A,在block内进行赋值,则可以赋值,外部赋值无效。例如:

    //成员变量
    int a
    static int b;
     
    {
        __block NSString d;
    
        void (^aBlock)(void) = ^(void) {
            a = 2;
            b = 3;
            d =  "d1"; //在block中设置d=d1
        };
    
        d= "d2";
    
    //执行block,这里输出a=2, b=3, d='d1'   注意这里的d!=d2,是等于d1
        aBlock();
    }

    可以参照苹果官方文档对于block的介绍:

    https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html

  • 相关阅读:
    Python基础篇【第二篇】:运算符
    python详细安装pip教程
    工作区和暂存区
    linux日常命令记录
    git-版本回退
    git-版本状态
    git-创建版本库
    Python核心编程读笔 8: 文件和输入输出
    Python核心编程读笔 7: 条件和循环
    Python核心编程读笔 6: 映射和集合类型
  • 原文地址:https://www.cnblogs.com/alunchen/p/5341057.html
Copyright © 2011-2022 走看看