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技巧与底层解析


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