oc中block的本质及底层原理

本文深入探讨Objective-C中的Block,包括Block的本质——带有自动变量的匿名函数,Block的三种存储区域(全局区、栈区、堆区),以及__block关键字的作用,解释了如何在Block中修改自动变量的基本类型数据。同时,文章阐述了Block引起的循环引用问题及其解决方案,通过示例代码帮助理解避免循环引用的方法。
摘要由CSDN通过智能技术生成
  • block的本质

  • block的种类及储存区域

  • __block的本质

  • block的循环引用

前言:

这里就不讨论block的具体写法及使用场景了,因为当你有一天想深入了解block 的底层原理时,你早已把block写了几十遍了。

一、block的本质:

block是带有自动变量的匿名函数。

注:

        局部变量  = 自动变量(栈区)+ 静态局部变量 (全局区)

        这里说的自动变量是指block里面捕获的外部局部变量,当然你也可以不捕获

二、block的种类及储存区域:

NSGlobalBlock :存放在全局区的block

        只有当block里面仅仅捕获了外部的静态局部变量、全局变量、静态全局变量时,该block 存.     放在全局区。当然,如果block里面什么类型的外部变量都不捕获时,它也在全局区。 

NSStackBlock : 存放在栈区的block

NSMallocBlock : 存放在堆区

        在arc下,截获了外部自动变量的block被创建出来时存放在栈区,然后如果该block被strong/copy 修饰符修饰时,系统会将该block从栈区,copy一份到堆区,并将指针指向堆区的block。

        而系统默认的就是strong类型

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值