美文网首页
记录一道block案例

记录一道block案例

作者: 改变1 | 来源:发表于2022-12-08 17:04 被阅读0次
- (void)blockDemo2{
    
    int a = 1;
    void(^__weak block1)(void) = nil;
    {
        void(^__weak block2)(void) = ^{
            NSLog(@"%d",a);
        };
        block1 = block2;
    }
    block1();
}

执行结果为1。
疑问在于为什么已经出了block2的作用域{},block2应该也已经消失为nil,在block1为nil的情况下,怎么执行结果依旧为1(说明block2依旧没有消失)?
首先两个block都为栈block,block2为栈block出了自己的作用域,栈数据还没有消失,指针还在。可以通过下面的例子解释实验下


image.png
image.png

如果增加一个对象,代码如下

- (void)blockDemo2{
    
    int a = 1;
    NSString *s = @"你好";

    void(^__weak block1)(void) = nil;
    {
        void(^__weak block2)(void) = ^{
            NSLog(@"%d--%@",a, s);
        };
        block1 = block2;
    }
    block1();
}

打印结果是什么?结果为1和null


image.png

这个为什么?因为通过alloc、new等创建的对象数据分配在堆,堆数据在出了作用域后会被清空。int类型的数据分配在栈

相关文章

  • Block浅析

    先看一道关于block的面试题: 解答:arc下打印的是block内存地址,mrc下会crash原因:block默...

  • Block记录- 修改Block

    iOS开发中,block是很常见的用法,也是面试很常见的问题点。最近在看到一篇很棒的文章,自己也做了实践。截图记录...

  • block 记录

    2015年12月11日星期五 block 的性质 block与delegate的区别说到底,block是函数(转码...

  • block记录

    做自由变量: 传值 和 传址 __block 打印:定义前:0x7ffee136e728定义后:0x6000000...

  • iOS Block的使用记录

    由于我们在开发的过程中block的语法是比较难记的,我就写了一篇文章记录block的语法糖,便于大家记录block...

  • 【iOS面试粮食】Block

    本文章将记录Objective-C中Block的相关资料,如有错误欢迎指出~ Block的本质 Block 实际上...

  • 一道Block面试题的深入挖掘

    0. 序言 最近看到了一道Block的面试题,还蛮有意思的,来给大家分享一下。 本文从一道Block面试题出发,层...

  • Block

    透彻了解块(Block)的里里外外_V刘一道_新浪博客 Block很简单,就像delegate的简化版 ...

  • 代理转BLOCK(定位)

    使用定位作为案例 1.定义一个返回位置信息的Block,添加获取位置的方法getLoc,使用该Block作为参数。...

  • iOS中__block 关键字的底层实现原理

    在 《iOS面试题集锦(附答案)》 中有这样一道题目:在block内如何修改block外部变量?(38题)答案如下...

网友评论

      本文标题:记录一道block案例

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