iOS - Block的类型

简介: iOS - Block的类型

三种类型


Block有如下三种类型


  • NSConcrateGlobalBlock 全局


  • NSConcrateStackBlock 栈


  • NSConcrateMallocBlock 堆


1. NSConcrateGlobalBlock 位于全局区


当我们声明一个Block,如果这个block没有捕获外部变量,那么这个Block就位于全局区,此时对NSGlobal的retain、copy、release都是无效的,ARC、MRC都是如此

- (void)blockType {
    void(^block1)(void) = ^{
    };
    NSLog(@"-- block1 = %@", [block1 class]);
}

2021-05-17 17:36:02.791048+0800 MemoryManageDemo[37503:5056528] -- block1 = __NSGlobalBlock__


2. NSConcrateStatckBlock 栈区


block捕获了外部变量,但是没有强引用这个block,直接打印出来

//NSConcrateStackBlock
    int a = 10;
    NSLog(@"-- block2 = %@",[^{
        NSLog(@"-- a = %@",a);
    } class]);

2021-05-17 18:35:27.662072+0800 MemoryManageDemo[57159:5148084] -- block2 = __NSStackBlock__


3. NSConcrateMallocBlock 堆区


ARC环境下只有捕获了外部变量,并且有强引用指向该Block(或做为函数返回值),系统就会自动将NSStackBlock copy到堆上,就是NSConcrateMallocBlock

//NSConcrateMallocBlock
    int b = 10;
    void(^block3)(void) = ^{
        NSLog(@"-- b = %d", b);
    };
    NSLog(@"-- block3 = %@", [block3 class]);

2021-05-17 18:37:36.525794+0800 MemoryManageDemo[57425:5151753] -- block3 = __NSMallocBlock__


关于Block源码解析的博客:


Block技巧与底层解析


相关文章
|
10月前
|
iOS开发
iOS使用.framework类型的静态库
iOS使用.framework类型的静态库
76 1
|
10月前
|
iOS开发 Perl
iOS使用.a类型的静态库
iOS使用.a类型的静态库
74 1
|
10月前
|
开发工具 iOS开发
iOS制作.a类型的静态库
iOS制作.a类型的静态库
62 1
|
Web App开发 iOS开发 开发者
ios证书类型及其作用说明
ios证书类型及其作用说明
132 0
|
程序员 开发工具 iOS开发
iOS 获取手机的型号,系统版本,软件名称,软件版本,手机类型(型号)
iOS 获取手机的型号,系统版本,软件名称,软件版本,手机类型(型号)
178 0
|
Android开发 iOS开发
判断手机端获取哪种类型的手机系统-安卓-ios
判断手机端获取哪种类型的手机系统-安卓-ios
|
iOS开发
iOS block修饰符用copy还是strong
iOS block修饰符用copy还是strong
186 0
|
iOS开发 Python
iOS小技能:lldb打印block参数签名
iOS逆向时经常会遇到参数为block类型,本文介绍一个lldb script,可快速打印出Objective-C方法中block参数的类型。
234 0
iOS小技能:lldb打印block参数签名
|
文字识别 开发工具 iOS开发
iOS小技能: OCR 之身份证识别 (正反面) 【 应用场景:物流类型app进行实名认证】
1、功能:可自动快速读出中国二代身份证上的信息(姓名、性别、民族、住址、身份证号码)并截取到身份证图像 2、应用场景:信用卡网申、商户进件、实名认证流程为了用户体验提供扫一扫证件识别身份证号码功能。
791 0
iOS小技能: OCR 之身份证识别 (正反面) 【 应用场景:物流类型app进行实名认证】
|
iOS开发 开发者
iOS开发 - 如何写出漂亮的block
iOS开发 - 如何写出漂亮的block
119 0

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 7
    iOS各个证书生成细节
  • 8
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
  • 9
    iOS MapView(定位)
  • 10
    iOS:应用程序的线程安全性
  • 1
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    110
  • 2
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    20
  • 3
    iOS各个证书生成细节
    29
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    151
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    47
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    59
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    49
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    42
  • 9
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    163
  • 10
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    339