Swift OC 記憶體管理

2021-07-16 01:30:40 字數 549 閱讀 1056

記憶體管理

1.為何要記憶體管理

因為物件的空間,被儲存在程序的堆空間中,而堆空間的申請和釋放需要程式設計師手動alloc和free,所以程式設計師要介入對於例項物件空間的釋放管理,若不管理,將導致在程序中的可用空間越來越少,記憶體洩漏(memory leak),因而我們記憶體管理的任務是及時和適時的釋放物件所占用的堆空間,避免記憶體洩漏的放生

2.在oc和swift語言中都採用了基於retaincount(物件空間引用的保留計數) 機制,來管理物件的記憶體釋放,當物件的retaincount為1時,若要再release,則導致物件空間被真正的dealloc(或free)

3.oc和可選採用mrc和arc來管理物件記憶體,而swift語言只採用arc來管理記憶體

4.arc機制下,可能會出現強引用迴圈現象,導致被強引用迴圈引用到的兩個(甚至多個)物件,記憶體永遠不釋放,造成記憶體洩露

5.解決強引用迴圈的方案是,使得其中的一方對於另一方物件申明為weak弱引用即可

6.解決強引用迴圈的另一種方案是,使得其中的一方申明為unowned無主引用即可,相當於oc中的的assign,不會自己賦值為nil

swift OC 深拷貝 淺拷貝

nsmutablearray 的copy 和mutablecopy可以自己證明下。總結 1 對於不可變物件,copy都是淺複製,即指標複製。mutablecopy 都是記憶體複製,即深複製 2 對於可變物件,copy和mutablecopy一般是記憶體複製,即深複製 3 容器類物件,不論是可變的還是...

記憶體管理 記憶體管理概述

儲存器的發展方向是高速 大容量和小體積,即儲存器嘗試更高讀寫速度,更大儲存容量,更小物理體積。在計算機中,常見的儲存器有 暫存器,快取,記憶體,硬碟,一般硬碟之類的輔助儲存器又稱外存。在平均讀寫速度上,有 暫存器 快取 記憶體 外存 在單位容量 上,有 外存 記憶體 快取 暫存器 cpu處理器只能直...

《記憶體管理》 記憶體

1.c c 記憶體分布 我們先來看下面的一段 和相關問題 int globalvar 1 static int staticglobalvar 1 void test char char2 abcd char pchar3 abcd int ptr1 int malloc sizeof int 4 ...