block实战讲解(1)

作者: 酷酷的哀殿 | 来源:发表于2016-03-25 19:29 被阅读221次
  1. 在OC里面,下面的两份代码有何区别?

    代码1

    dispatch_async(queue, ^{
        doSomethingWithObject(instanceVariable);
    });
    

代码2

    id localVariable = instanceVariable;
    dispatch_async(queue, ^{
        doSomethingWithObject(localVariable);
    });

解析:

    代码1会导致`block`强引用`self`,`block`销毁时才会释放对`self`的引用。
    代码2会导致`block`强引用`localVariable`,`block`销毁时才会释放对`localVariable`的引用,不会对`self`强引用。
  1. 下面两份代码分别打印什么?

    代码1

      void (^blockArray[3])(void);
    
      for ( int i = 0; i < 3; ++i) {
        blockArray[i] = ^{ printf("hello, %d\n", i+3); };
      }
    
      blockArray[0]();
    
      blockArray[1]();
    
      blockArray[2]();
    

    代码2

      void (^blockArrayWithBock[3])(void);
    
      for (__block int i = 0; i < 3; ++i) {
        blockArrayWithBock[i] = ^{ printf("hello, %d\n", i+3); };
      }
    
      blockArrayWithBock[0]();
    
      blockArrayWithBock[1]();
    
      blockArrayWithBock[2]();
    解析:
    

    代码1,因为i没有修饰符,所以,i的值会在block创建时,被block当做const处理。++i后,block内部的i值不会发生变化
    hello, 3
    hello, 4
    hello, 5

    代码2,因为i__block修饰符,所以,i的值会在语法作用域和block内共享。++后,block内部的i值也随之改变。

    hello, 6
    hello, 6
    hello, 6

相关文章

  • block实战讲解(1)

    在OC里面,下面的两份代码有何区别?代码1dispatch_async(queue, ^{ doSometh...

  • block实战讲解(2)

    在ARC环境下,下面的代码的执行结果是什么? 答: 解析:

  • 关于block(5)

    标签: iOS 技术 接上篇,继续block研究,这一篇讲解实战中的block反向传值,一个非常实用的技术。 bl...

  • 06.4-OC中block捕获对象类型的变量

    block捕获对象类型的变量 前面讲解的block变量捕获,我们讲解了block捕获基本数据类型的情况,下面我们再...

  • JNI基础知识讲解

    目录 cmake快速实战 Android JNI基础知识讲解 Android JNI实战 1、序言 学习ndk,就...

  • iOS Block 部分二

    主要讲解 Block 的分类和变量捕获的强弱引用; Block部分一Block部分二Block部分三Block知识...

  • iOS Block 部分一

    主要讲解 Block 的底层实现原理; Block部分一Block部分二Block部分三Block知识点总结 基础...

  • iOS自定义转场动画实战讲解

    iOS自定义转场动画实战讲解 iOS自定义转场动画实战讲解

  • iOS高效添加圆角效果实战讲解

    iOS高效添加圆角效果实战讲解 iOS高效添加圆角效果实战讲解

  • iOS Block 部分三

    主要讲解 Block内修改外部变量, 内存管理, 以及循环引用; Block部分一Block部分二Block部分三...

网友评论

    本文标题:block实战讲解(1)

    本文链接:https://www.haomeiwen.com/subject/fmkdlttx.html