zoukankan      html  css  js  c++  java
  • Block知识点总结

     block的作用                                          

    block用于保存一段代码 在适当的时候再使用  它是一种数据类型

    block的定义格式:

    返回值  (^block变量名)(形参列表) = ^(形参列表) {

            需要执行的代码
    };

    调用block 直接用block 变量名后面跟上小括号 小括号里面方式参数就可以了

    如: block变量名(参数)

    例如: 如下定义一个没有参数没有返回值的block

    void (^Operation)()= ^(){

    }

    如果block没有参数 可以这样写

    void (^Operation)()= ^{

    }

    调用block 使用 Operation() 即可

    定义一个有参数没有返回值的block

    void (^Operation)(NSString* a)= ^(NSString *a){

    }

    调用block  :   Operation(@"我是一个有参数没有返回值的block");

    定义一个有参数有返回值的block

    int (^sum)(int,int) = ^(int a,int b){

      return a+b;

    }

    调用block  :  int sum =  Operation(1,5);

    知道了block的简单使用之后  接下来我们来说说block在内存中是怎样的

    首先 默认block 是存放在栈空间的 但是如果你把block作为一个属性 并且进行了copy 操作之后 那么此时block 就会存储到堆空间

    也就是说: 如果你没有对block进行copy操作 那么block 就存放在栈空间   如果你对block进行copy操作 那么block 就存放在堆空间

    我们在开发中经常会碰到循环引用的问题 这个问题是怎么产生的呢?  记住下面两个结论你就明白了

    1.如果block存储于栈空间 不会对block内部 所用到的对象产生强引用

    2.如果block存储于堆空间 会对block内部 所用到的对象产生强引用

    那么这里就牵扯出了循环引用的问题 如何解决循环引用呢?

    记住下面两个结论 解决循环引用 So Easy

    1.ARC下 使用 __weak 或者 __unsafe_unretainted 

    1.MRC下 使用__block 

  • 相关阅读:
    编译nginx增加fair模块
    使用CentOS8来部署php7.4
    通过PHP代码将大量数据插入到Sqlite3
    不同程序语言处理加密算法的性能对比(PHP/Golang/NodeJS)
    CentOS8更换国内YUM源
    MySQL获取上月第一天、上月最后日、本月第一天、本月最后日的方法
    GO
    Go-数据类型以及变量,常量,函数,包的使用
    GO语言介绍以及开发环境配置
    利用python代码操作git
  • 原文地址:https://www.cnblogs.com/syios/p/5912290.html
Copyright © 2011-2022 走看看