美文网首页
iOS Block深入理解

iOS Block深入理解

作者: 程序员进阶 | 来源:发表于2021-09-18 08:28 被阅读0次

https://www.jianshu.com/p/4e79e9a0dd82?ivk_sa=1025922x

Q:各类型的block在内存中如何分配的?

__NSGlobalBlock __ 在数据区

__NSMallocBlock __ 在堆区

__NSStackBlock __ 在栈区

堆:动态分配内存,需要程序员自己申请,程序员自己管理

栈:自动分配内存,自动销毁,先入后出,栈上的内容存在自动销毁的情况

代码展示block的三种类型:

int age =1;

    void(^block1)(void) = ^{

        NSLog(@"block1");

    };

    void(^block2)(void) = ^{

        NSLog(@"block2:%d",age);

    };

    NSLog(@"%@/%@/%@",[block1class],[block2class],[^{

        NSLog(@"block3:%d",age);

    }class]);

输出结果:

__NSGlobalBlock __/__NSMallocBlock __/__NSStackBlock __

总结

如果block没有捕获自动变量,那么就是__NSGlobalBlock__类型;

没有访问auto变量的block是__NSGlobalBlock __ ,放在数据段

如果block捕获了自动变量,且此block没有执行过copy操作,那么就是__NSStackBlock__类型;

访问了auto变量的block是__NSStackBlock __;

如果__NSStackBlock__类型的block执行过copy操作,那么就是__NSMallocBlock__类型。

[__NSStackBlock __ copy]操作就变成了__NSMallocBlock __;

相关文章

  • 【iOS开发】一些不错的文章博客整理

    持续更新... RunLoop ibireme深入理解RunLoop Block 声明Block 组件化 iOS组...

  • iOS block深入理解

    在平时的开发中,对于block,只是知道主要用于数据回调上,对于其内部实现方式,以及一些使用时的注意事项,...

  • iOS Block深入理解

    https://www.jianshu.com/p/4e79e9a0dd82?ivk_sa=1025922x[ht...

  • 深入理解iOS之 Block

    一 Block基本语法 1.1 什么是block 带有自动变量(局部变量)的匿名函数; 1.2 Block语法 ...

  • iOS block深入理解(一)

    引言:Block的声明与赋值只是保存了一段代码段,必须调用才能执行内部代码 本文要初步解决的问题 block是什么...

  • iOS - block原理解读(三)

    前言 在阅读该篇文章前,推荐阅读ios - block原理解读(一)ios - block原理解读(二) 本文解决...

  • iOS 内存管理

    深入研究Block捕获外部变量和__block实现原理 http://ios.jobbole.com/88406...

  • 004-深入理解iOS Block

    路人乙:请用一句话说说iOS中的Block。 内存中的结构体,也是一个对象,结构体中有个函数指针,用来调用bloc...

  • ios中block的深入理解

    block有三种类型:NSGlobalBlock,NSStackBlock,NSMallocBlock。 1. ...

  • iOS block探究(二): 深入理解

    你要知道的block都在这里 转载请注明出处 http://www.jianshu.com/p/b6a675a7a...

网友评论

      本文标题:iOS Block深入理解

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