美文网首页
Block捕获变量

Block捕获变量

作者: 初灬终 | 来源:发表于2019-10-18 09:03 被阅读0次

block捕获的变量

  1. 局部变量
  2. 静态局部变量
  3. 全局变量
  4. 静态全局变量
void testBlock() {

    int num = 3;
    NSArray *array;

    static int static_num = 4;
    static NSArray *static_array;

    void(*block)(int) = ((void (*)(int))&__testBlock_block_impl_0((void *)__testBlock_block_func_0, 
                        &__testBlock_block_desc_0_DATA, num, array, &static_num, &static_array, 570425344));
    ((void (*)(__block_impl *, int))((__block_impl *)block)->FuncPtr)((__block_impl *)block, 2);
}
函数执行部分
static void __testBlock_block_func_0(struct __testBlock_block_impl_0 *__cself, int i) {
  int num = __cself->num; // bound by copy
  NSArray *array = __cself->array; // bound by copy
  int *static_num = __cself->static_num; // bound by copy
  NSObject **static_NSObject = __cself->static_NSObject; // bound by copy
  NSLog...
  NSLog...
  NSLog...
总结

局部变量基本数据类型:捕获的值
局部变量对象类型:捕获的是值和属性修饰符
静态局部变量基本数据类型:捕获的是指针
静态局部变量对象类型:捕获的是指针的指针
全局变量:不捕获
静态全局变量:不捕获

应用
void testBlock1() {
    
    int num = 3;
    void(^block)(int) = ^(int i){
        NSLog(@"i * num = %d", num * i);
    };
    num = 4;
    block(2);
    //结果为 6.
    //局部变量基本数据类型捕获的是值,捕获的是值3,3 * 2 = 6;
}
void testBlock1() {
    
    static int num = 3;
    void(^block)(int) = ^(int i){
        NSLog(@"i * num = %d", num * i);
    };
    num = 4;
    block(2);
    //结果为 8.
    //局部变量基本数据类型捕获的是值,捕获的num的指针,num被修改为4,4 * 2 = 8;
}
void testBlock1() {
    
    NSArray *array  = @[@"hello", @"world"];
    void(^block)(int) = ^(int i){
        NSLog(@"array = %@", array);
    };
    array = @[@"1111"];
    block(2); //array = (hello,world)
    //局部变量对象类型,捕获值和属性修饰符。
}
void testBlock1() {
    
    static NSArray *array;
    void(^block)(int) = ^(int i){
        NSLog(@"array = %@", array);
    };
    array = @[@"1111"];
    block(2); //array = (1111)
    //静态局部变量,捕获指针。
}

相关文章

  • block:block捕获变量

    一、block捕获变量根儿上的东西 1、block会捕获局部变量 2、block不会捕获全局变量二、block捕获...

  • Block变量捕获详解(一)

    什么是Block变量捕获block变量捕获就是在block内部创建一个变量来存放外部变量什么是值捕获block将外...

  • Block 第三次学习 感谢 MJ老师

    block 内部结构 Block block 变量捕获 变量类型捕获到block 内部访问方式局部变量auto(平...

  • OC基础-Block(2)

    OC基础-Block(2)Block的变量捕获为了保证block内部能够正常访问外部的变量,block有个变量捕获...

  • OC中的Block(二)

    block的变量捕获(capture) 为了保证block内部能够正常访问外部的变量,block有个变量捕获机制 ...

  • block变量的捕获(capture)

    ?为了保证block内部能够正常访问外部变量,block有个变量捕获机制 auto变量的捕获

  • Objective - C block(二)block的类型及捕

    (一)block 捕获变量类型 为了保证block内部能够正确访问外部的变量,block有一个变量捕获机制 (1)...

  • Objective-C Block深入源码

    1. Block捕获自动变量 如何捕获自动变量? Block转换为C函数之后,Block中使用的自动变量会被作为成...

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

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

  • iOS开发-7.Block

    1.block的本质 2.block的变量捕获(capture) 3.auto变量的捕获image 4.block...

网友评论

      本文标题:Block捕获变量

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