【iOS】——内存分区

内存管理

程序运行的过程中往往会涉及到创建对象、定义变量、调用函数或方法,而这些行为都会增加程序的内存占用。为了防止内存占用过多影响到程序的正常运行就需要对内存进行管理。

移动端的内存管理机制,主要有三种:

  • 自动垃圾收集(GC)
  • 手工引用计数和自动释放池(MRC)
  • 自动引用计数(ARC)

苹果公司使用的是手工引用计数(MRC)和自动引用计数(ARC)机制。

内存分区

iOS中内存分为五大区域:

  • 代码区:存放程序运行的机器指令,只读。

  • 常量区:常量区用于存储常量数据,如字符串字面量和常量数值(int、float、string等)。这些数据在整个程序运行期间不能被修改,通常在编译时就确定了。常量区的数据在程序结束时由系统释放。

  • 全局区/静态区:它主要存放静态数据、全局数据和常量。分为未初始化全局区(BSS 段)、初始化全局区:(data段)。这些变量在程序整个生命周期内都存在,除非程序终止。全局区和静态区在程序启动时由系统分配,并在程序结束时由系统释放。一般以0x1开头

  • 栈区:存放局部变量、函数参数和函数调用的返回地址等。由编译器自动分配和管理的一块从高地址向低地址存储的一块连续的内存区域。栈空间分静态分配和动态分配两种:静态分配是编译器完成的,比如自动变量(auto)的分配。动态分配由alloc函数完成。栈的地址空间在在iOS里面是0X7/ 0X16开头

  • 堆区:用于存放进程运行中被动态分配的内存段。它大小不固定,可动态扩张和缩减。从低地址向高地址的不连续的内存区域。由程序员分配和释放。堆地址是以0X6进行开头

img

对象的指针通常存储在栈中,对象本身存储在堆中

static、extern、const

静态变量通过static关键字修饰,分为全局静态变量和局部静态变量。唯一区别就是作用域不同。

static NSString *name;

不管实例方法还是类方法都可以访问和修改静态变量,并且外部类无法调用静态变量,定义后只会指向固定的指针地址,供所有对象使用,节省空间。

全局变量分为对内和对外两种。

//.m中要定义
NSString *name;//.h中同时要定义
extern NSString *name;
  • 对内的全局变量:没有用extern在.h中修饰的变量,仅定义在.m中让该变量只能在该类使用

  • 外部全局变量:除了该类,其他文件也可以访问该变量

    全局静态变量与全局变量 其实本质上是没有区别的,只是存在修饰区别,一个static让其只能内部使用,一个extern让其可以外部使用。

const修饰常量,常量为只读不可修改,一般用于接口或者文字显示这种固定值

//.h中定义extern
extern NSString *const name;
//.m中定义值
NSString *const name = @"123";

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两台电脑之间如何进行数据传输?两台电脑数据传输攻略

在数字化时代,电脑之间的数据传输变得日益重要。无论是个人用户还是企业用户,经常需要在不同的电脑之间共享或迁移数据。那么,两台电脑之间如何进行数据传输呢?本文将详细介绍两台电脑之间进行数据传输的几种常见方法,…

CI/CD的node.js编译报错npm ERR! network request to https://registry.npmjs.org/

1、背景: 在维护paas云平台过程中,有研发反馈paas云平台上的CI/CD的前端流水线执行异常。 2、问题描述: 流水线执行的是前端编译,使用的是node.js环境。报错内容如下: 2024-07-18T01:23:04.203585287Z npm ERR! code E…

【BUG】已解决:note: This is an issue with the package mentioned above,not pip.

已解决:note: This is an issue with the package mentioned above,not pip. 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷…

Pytorch基础应用

1.数据加载 1.1 读取文本文件 方法一:使用 open() 函数和 read() 方法 # 打开文件并读取全部内容 file_path example.txt # 替换为你的文件路径 with open(file_path, r) as file:content file.read()print(content)方法二:逐行读取文件内容 # 逐…

【 FPGA 线下免费体验馆】高端 AMD- xilinx 16 nm UltraScale +系列

在复杂的FPGA 开发的过程中,需要能够满足高速、高精度、多通道等的复杂应用。而一个简单的 FPGA 开发板是不具备这些的,因此需要用更高端,大容量,高速IO的 FPGA 芯片与其他硬件组成一个完整的系统开发。这里就产生了高端 FPGA 开发…

redis服务器同 redis 集群

搭建redis服务器 修改服务运行参数 常用命令常用命令 创建redis集群 准备做集群的主机,不允许存储数据、不允许设置连接密码 配置服务器: 1、在任意一台redis服务器上都可以执行创建集群的命令。 2、--cluster-replicas 1 给每个master服务器分配1台…

【go】Excelize处理excel表 带合并单元格、自动换行与固定列宽的文件导出

文章目录 1 简介2 相关需求与实现2.1 导出带单元格合并的excel文件2.2 导出增加自动换行和固定列宽的excel文件 1 简介 之前整理过使用Excelize导出原始excel文件与增加数据校验的excel导出。【go】Excelize处理excel表 带数据校验的文件导出 本文整理使用Excelize导出带单元…

汇编教程1

本教程主要教大家如何使用vscode插件编写汇编语言,这样更方便,不用在32位虚拟机中编写汇编语言,后续的汇编实验代码都是使用vscode编写,话不多说,开始教学 安装vscode 如果已经安装过vscode,可以跳过这一…

Python创建Excel表和读取Excel表的基础操作

下载openpyxl第三方库 winr打开命令行输入cmd 这个如果不行可以试试其他方法,在运行Python代码的软件里也有直接下载的地方,可以上网搜索 创建Excel表 示例代码:最后要记得保存,可以加一句提示语句。 import openpyxl lst[100,…

【Apache Doris】周FAQ集锦:第 16 期

【Apache Doris】周FAQ集锦:第 16 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户…

简单工厂、工厂方法与抽象工厂之间的区别

简单工厂、工厂方法与抽象工厂之间的区别 1、简单工厂(Simple Factory)1.1 定义1.2 特点1.3 示例场景 2、工厂方法(Factory Method)2.1 定义2.2 特点2.3 示例场景 3、抽象工厂(Abstract Factory)3.1 定义3.…

【JavaEE-多线程背景-线程等待-线程的六种状态-线程安全问题-详解】

🌈个人主页:SKY-30 ⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 &…

C语言实现冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。 遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元…

数据包的跨层封装

首先,我们先简单地分析一下数据包的组成结构: 如图 数据包简略地分为以下几层: 二层:封装MAC地址(数据链路层) 三层:封装IP地址 — 表明源IP和目标IP,主要用于路由器之间的信息转发…

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

​​​​​​​ 一、引言 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理&#x…

挖矿宝藏之硬盘分区

目录 一、硬盘分区的相关知识 二、主分区、活动分区、扩展分区、逻辑盘和盘符 三、硬盘分区原因 1.减少硬盘空间的浪费 2.便于文件的分类管理 3.有利于病毒的防治 四、硬盘分区的原则 1.方便性 2.实用性 3.安全性 五、利用Diskpart进行分区 1.命令行工具Diskpart …

ARM体系结构和接口技术(五)封装RCC和GPIO库

文章目录 一、RCC(一)思路1. 找到时钟基地址2. 找到总线的地址偏移(1)AHB4总线(2)定义不同GPIO组的使能宏函数(3)APB1总线(4)定义使能宏函数 二、GPIO&#x…

捷配笔记-混合信号PCB布局设计的基本准则是什么?

混合信号PCB设计需要对模拟和数字电路有基本的了解,以最大限度地减少(如果不能防止的话)信号干扰。现代系统由数字域和模拟域均可操作的组件组成,这些组件必须经过精心设计,以确保整个系统的信号完整性。 在混合信号系…

MySQL学习记录 —— 이십이 MySQL服务器文件系统(2)

文章目录 1、日志文件的整体简介2、一般、慢查询日志1、一般查询日志2、慢查询日志FILE格式TABLE格式 3、错误日志4、二进制日志5、日志维护 1、日志文件的整体简介 中继服务器的数据来源于集群中的主服务。每次做一些操作时,把操作保存到重做日志,这样崩…

vscode+wsl2+anaconda环境的配置与使用

目录 下载anaconda Anaconda使用参考 vscodeubuntuanaconda 先用vscode连接本地ubuntu。 如果没有安装wsl2与ubuntu,可点击下面的链接。 问题:wsl install 无法解析服务器 成功记录: 在vscode终端用ubuntu安装anaconda。 创建pytho…