iOS Block面试题(Block的几种形式)

本文详细介绍了iOS中Block的三种形式:全局Block、栈Block和堆Block,分别解析它们的存储区域和生命周期。通过实例代码展示了不同Block形式的转换,强调了栈Block复制后的变化以及__block变量在内存管理中的作用,同时指出__block修饰self可能导致的循环引用问题及其解决方案。
摘要由CSDN通过智能技术生成

Block的几种形式

  • 分为全局Block(_NSConcreteGlobalBlock)、栈Block(_NSConcreteStackBlock)、堆Block(_NSConcreteMallocBlock)三种形式
    其中栈Block存储在栈(stack)区,堆Block存储在堆(heap)区,全局Block存储在已初始化数据(.data)区

1、不使用外部变量的block是全局block

比如:

    NSLog(@"%@",[^{
        NSLog(@"globalBlock");
    } class]);

输出:

__NSGlobalBlock__

2、使用外部变量并且未进行copy操作的block是栈block

比如:

  NSInteger num = 10;
    NSLog(@"%@",[^{
        NSLog(@"stackBlock:%zd",num);
    } class]);

输出:

__NSStackBlock__

日常开发常用于这种情况:

[self testWithBlock:^{
    NSLog(@"%@",self);
}];

- (void)testWithBlock:(dispatch_block_t)block {
    block();

    NSLog(@"%&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值