__block的作用和内存分区

这里我直接就把本文的重点写出来:

一, __block的作用

__block的根本作用就是把block的外部变量的地址,从栈区放到堆区.

__block只要观察到某一个成员变量被block所持有,就会把该变量的内存地址从栈区放到堆区,因此在堆区的该成员变量就会变成有用户自己分配和释放,不会被系统管理造成丢失.

二,内存的5个分区

1,栈区(stack):存放函数局部变量和函数的参数,有系统管理分配和收回
2,堆区(heap):存放由用户手动new对象的内存区域,分配是使用alloc, 释放:release, autorelease
ARC的管理是在编译的时候自动retain,release,autorelease的.
3,全局区/静态区(static):存放全局变量和静态变量,该区又分为.bbs区和data区, bbs区存放的是有初始化的全局变量和静态变量. data区存放的是未初始化的全局变量和静态变量.
4,常量区(const):存放常量的内存区
5,代码区:存放函数的二进制代码区

内存的分区如图
iOS的底层是基于Unix的, 而Android的底层则是基于Linux的,所以iOS和Android的底层分区管理是基本相等的.
栈区存放高地址, 代码区存放低地址.而且区与区之间是不连续的.在程序启动的整个过程中,代码区,常量区,全局区/静态区的大小是固定的, 不会变化的,而只有栈区和堆区是有系统分配管理的,这两个区的大小是时刻发生变化的(堆区的释放,栈区的进入进出).

栈区
堆区
全局区/静态区
常量区
代码区
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容