block三种类型区分

作者: 介和 | 来源:发表于2019-03-03 11:26 被阅读0次

参考 https://blog.csdn.net/Deft_MKJing/article/details/53165799

 int a = 1;

    // 这里的^{}初始化的block赋值给block变量,在OC中没有具体写明的情况下应该就是strong类型的,这就是上面第三点的例子

    // 打印出来 first <__NSMallocBlock__: 0x60800004d290>

    void (^block)(void) = ^{

        NSLog(@"%d",a);

    };

    NSLog(@"first %@",block);

    // 没有截获变量的时候就是globalBlock

    // second<__NSGlobalBlock__: 0x102f80100>

    NSLog(@"second%@",^{NSLog(@"呵呵");});

    // 截获了变量就是stackBlock

    // third<__NSStackBlock__: 0x7fff5cc7faa0>

    NSLog(@"third%@",^{NSLog(@"%d",a);});

    __block int val = 10;

    __strong blk strongPointerBlock = ^{NSLog(@"val1 = %d", ++val);};

    // strongPointerBlock: <__NSMallocBlock__: 0x600000044e90>

    NSLog(@"strongPointerBlock: %@", strongPointerBlock); //1

    __weak blk weakPointerBlock = ^{NSLog(@"val2 = %d", ++val);};

    // weakPointerBlock: <__NSStackBlock__: 0x7fff5282ea70>

    NSLog(@"weakPointerBlock: %@", weakPointerBlock); //2

    // mallocBlock3: <__NSMallocBlock__: 0x608000046930>

    NSLog(@"mallocBlock3: %@", [weakPointerBlock copy]); //3

    // 截获了test <__NSStackBlock__: 0x7fff5282ea48>

    NSLog(@"test4 %@", ^{NSLog(@"val4 = %d", ++val);}); //4

    // test5 <__NSMallocBlock__: 0x60800005c0b0>

    NSLog(@"test5 %@", [^{NSLog(@"val4 = %d", ++val);} copy]); //5

    // stackBlock经过传参 打印

    NSLog(@"传参后 %@",[self getBlock]);

}

- (blk)getBlock

{

    int val = 11;

    // 上面已经介绍了,这种直接打印传参前的block,应该是__NSStackBlock__

    NSLog(@"传参前:%@",^{NSLog(@"%d",val);});

    // 那么现在我们直接传出去

    return ^{NSLog(@"%d",val);};

}

相关文章

  • iOS 常见面试题 -- block

    一、block的本质 二、block的类型 block 有三种类型分别如下: 如何区分block的类型 三、blo...

  • iOS block 为什么官方文档建议用 copy 修饰

    一、block 的三种类型block 三种类型:全局 block,堆 block、栈 block。全局 block...

  • Block

    Block的变量捕获(capture) Block的类型 如何区分Block的类型 MRC:Global:没有访问...

  • block三种类型区分

    参考https://blog.csdn.net/Deft_MKJing/article/details/53165...

  • iOS Block

    Block block 类型 block主要有三种类型 NSGlobalBlock:全局block,存储在全局区 ...

  • Block实现原理

    主要介绍block的类型和底层分析 block类型 block主要由三种类型 NSGlobalBlock:全局bl...

  • OC底层-block底层原理探究

    一、block的常见三种类型 1.1 NSGlobalBlock NSGlobalBlock 全局类型block,...

  • Block原理分析

    block类型 我们都知道block有三种类型:NSGlobalBlock、NSStackBlock、NSMall...

  • iOS底层-Block底层原理

    block类型 block主要有三种类型 __NSGlobalBlock__:全局block,存储在全局区 此时的...

  • 关于block

    1、三种类型的block介绍 根据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackB...

网友评论

    本文标题:block三种类型区分

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