内存分配方式有三种: 程序员
局部变量: 栈
全局/静态变量: 静态全局区
Objective-C 对象: 堆objective-c
对象和变量的区别swift
- 对象是一段存储空间
- 变量由对象的声明引入。变量的名称表示对象。
NSObject *obj = [[NSObject alloc] init];复制代码
这行代码建立了一个 NSObject 类型的指针 obj 和一个 NSObject 类型的对象,obj 指针存储在栈上,而其指向的对象则存储在堆上(简称为堆对象)缓存
Swift的内存管理基本和OC相同
因为引入了值类型和引用类型又变得复杂了一些.函数
可能有小伙伴会疑惑:
引用类型的值类型呢?
值类型老是分配在它声明的地方ui
见下表:
先明确两组概念:spa
接着明确 这两组因素对 存储位置的影响指针
因素 | 值类型 | 引用类型 |
---|---|---|
局部对象 | 栈 | 堆 |
属性 | 堆 | 堆 |
值类型老是分配在它声明的地方:做为字段时,跟随其所属的变量(实例)存储;做为局部变量时,存储在栈上。code
注意:引用类型中的值类型字段 也是存储在堆上的.对象
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它一般是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在须要时进行数据交换。
可是iOS的虚拟内存,并无内存与外存数据交换的功能。