內存分配方式有三種: 程序員
局部變量: 棧
全局/靜態變量: 靜態全局區
Objective-C 對象: 堆objective-c
對象和變量的區別swift
- 對象是一段存儲空間
- 變量由對象的聲明引入。變量的名稱表示對象。
NSObject *obj = [[NSObject alloc] init];複製代碼
這行代碼建立了一個 NSObject 類型的指針 obj 和一個 NSObject 類型的對象,obj 指針存儲在棧上,而其指向的對象則存儲在堆上(簡稱爲堆對象)緩存
Swift的內存管理基本和OC相同
因爲引入了值類型和引用類型又變得複雜了一些.函數
可能有小夥伴會疑惑:
引用類型的值類型呢?
值類型老是分配在它聲明的地方ui
見下表:
先明確兩組概念:spa
接着明確 這兩組因素對 存儲位置的影響指針
因素 | 值類型 | 引用類型 |
---|---|---|
局部對象 | 棧 | 堆 |
屬性 | 堆 | 堆 |
值類型老是分配在它聲明的地方:做爲字段時,跟隨其所屬的變量(實例)存儲;做爲局部變量時,存儲在棧上。code
注意:引用類型中的值類型字段 也是存儲在堆上的.對象
虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認爲它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它一般是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在須要時進行數據交換。
可是iOS的虛擬內存,並無內存與外存數據交換的功能。