• iOS开发——Block详解


    iOS开发——Block详解


    1. Block是什么

    • 代码块
    • 匿名函数
    • 闭包——能够读取其他函数内部变量的函数
    • 函数变量
    • 实现基于指针和函数指针
    • 实现回调的机制

    Block是一个非常有特色的语法,它可以把一个代码块作为一个变量来保存,也可以通过函数传递变量,然后让其他的对象来执行这一代码块。可以保存传递并在其他地方执行的代码块,这是我对Block的理解,也是我觉得Block最吸引我的地方。

    2. 怎么写Block

    官方写法

    /**直接定义——返回Block指针
    *   ^返回类型<可省略>(参数类型 参数)<没有参数可省略>{
    *   代码块;
    *   };
    */
    ^int(int a){
        return a;
    };
    
    /**使用Block——返回Block返回值
     *  Block(参数)
     */
    ^int(int a){
        return a;
    }(5);
    
    /**声明定义Block变量
     *  返回类型 (^变量名)(参数类型);
     */
    int (^example)(int);
    example = ^(int a){
        return a;
    };
    

    最建议写法

    /**类型声明定义Block变量
     *  typedef 返回类型 (^Block名)(参数类型);
     */
    typedef int (^Example)(int);
    Example eg = ^(int a){
        return a;
    };
    eg(5);
    

    3. Block存在的坑

    • 默认Block只能访问局部变量的值,但是不能修改局部变量的值
    • 要修改局部变量的值需要在定义变量前面加上__block
    • 要修改局部对象的值需要在定义对象前面加上__weak
    • 全局变量的机制跟局部变量一样,默认传入时只会Copy源变量,对它修改不会起到任何作用,只有用__block或者__weak修饰的变量操作才有意义
    • 块是在栈上分布的,如果要保留块,就必须使用copy@property (nonamatic, copy) ABlock eg;
  • 相关阅读:
    常用php操作redis命令整理(四)SET类型
    常用php操作redis命令整理(三)LIST类型
    常用php操作redis命令整理(二)哈希类型
    常用php操作redis命令整理(一)通用及字符串类型
    php时间戳函数mktime()
    Linux SSH远程文件/目录传输命令scp
    运行一个android程序,直接访问某个网站
    Android开发学习笔记:浅谈WebView
    Android 权限添加
    linux下使用vi操作
  • 原文地址:https://www.cnblogs.com/wisejoker/p/3957507.html
Copyright © 2020-2023  润新知