35 記憶體管理

2021-08-19 19:26:46 字數 2615 閱讀 1847

1. 記憶體管理

記憶體的作用:儲存資料.

1). 如何將資料儲存到記憶體之中.

宣告1個變數.然後將資料儲存進去.

2). 當資料不再被使用的時候,占用的記憶體空間如何被釋放.

2. 記憶體中的五大區域

棧: 區域性變數. 當區域性變數的作用域被執行完畢之後,這個區域性變數就會被系統立即**.

堆: oc物件.使用c函式申請的空間.

bss段: 未初始化的全域性變數、靜態變數. 一旦初始化就** 並轉存到資料段之中.

資料段: 已經初始化的全域性變數、靜態變數. 直到程式結束的時候才會被**.

**段: **. 程式結束的時候,系統會自動**儲存在**段中的資料.

棧、bss段、資料段、**段儲存在它們中的資料的**,是由系統自動完成的.不需要我們干預.

3. 分配在堆區中的oc物件,是肯定需要被**的.

iphone 記憶體機制.

40m 警告

45m 警告

120m 閃退.

儲存在堆中的oc物件,系統不會自動**. 直到程式結束的時候才會被**.

4. 記憶體管理的範圍:

只需要管理儲存在堆中的oc物件的**.其他區域中的資料的**是系統自動管理的.

5. 物件應該什麼時候被**?

當有人使用這個物件的時候,這個物件就千萬不能**.

只有在沒有任何人使用這個物件的時候,才可以**.

6. 引用計數器

1). 每1個物件都有1個屬性.叫做retaincount.叫做引用計數器. 型別是unsigned long 佔據8個位元組.

引用計數器的作用: 用來記錄當前這個物件有多少個人在使用它.

預設情況下,建立1個物件出來 這個物件的引用計數器的預設值是1.

2). 當多1個人使用這個物件的時候.應該先讓這個物件的引用計數器的值+1 代表這個物件多1個人使用.

3). 當這個物件少1個人使用的時候.應該先讓這個物件的引用計數器的值-1 代表這個物件少1個人使用.

4). 當這個物件的引用計數器變為0的時候.代表這個物件無人使用. 這個時候系統就會自動**這個物件.

7. 如何操作引用計數器.

1). 為物件傳送1條retain訊息. 物件的引用計數器就會加1. 當多1個人使用物件的時候才發.

2). 為物件傳送1條release訊息.物件的引用計數器就會減1. 當少1個人使用物件的時候才發.

3). 為物件傳送1條retaincount訊息. 就可以去到物件的引用計數器的值.

就這樣++ -- 當物件的引用計數器變為0的時候,物件就會被系統立即**.

在物件被**的時候.會自動呼叫物件的dealloc方法.

8. 記憶體管理的分類

mrc: manual reference counting 手動引用計數.手動記憶體管理.

當多1個人使用物件的時候,要求程式設計師手動的傳送retain訊息.少1個人使用的時候程式設計師手動的傳送relase訊息.

2023年之前 ios5之前

arc: automatic reference counting 自動引用計數.自動記憶體管理.

系統自動的在合適的地方傳送retain relase訊息.

我們今天學習的mrc.

學習mrc的理由:

1). 面試必考 100%

3). ios大牛都是從mrc成長起來的. 方便交流.

4). arc是基於mrc

1. ios5開始. xcode4.2開始就支援arc

xcode7 預設支援arc開發.

預設使用的開發方式就是arc的模式.

關閉arc開啟mrc.

2. 當物件的引用計數器變為0的時候,系統會自動**物件.

在系統**物件的時候.會自動的呼叫物件的dealloc方法.

重寫dealloc方法的規範:

必須要呼叫父類的dealloc方法. 並且要放在最後一句**.

3. 測試引用計數器.

1). 新建立1個物件,這個物件的引用計數器的值預設是1.

2). 當物件的引用計數器變為0的時候.物件就會被系統立即** 並自動呼叫dealloc方法.

3). 為物件傳送retain訊息 物件的引用計數器就會+1

4. 為物件傳送release訊息.並不是**物件.而是讓物件的引用計數器-1

當物件的引用計數器的值變為0的時候.物件才會被系統立即**.

1. 記憶體管理的重點

1). 什麼時候為物件傳送retain訊息.

當多1個人使用這個物件的時候,應該先為這個物件傳送retain訊息.

2). 什麼時候為物件傳送releaee訊息.

當少1個人使用這個物件的時候.應該為這個物件傳送1條release訊息.

2. 在arc機制下,retain release dealloc這些方法方法無法呼叫.

2. 記憶體管理的原則

1). 有物件的建立,就要匹配1個release

2). retain的次數和release的次數要匹配.

3). 誰用誰retain. 誰不用誰release.

誰負責retain 誰就負責relase

4). 只有在多1個人用的時候才retain 少1個人使用的時候才release

有始有終,有加就有減. 有retain就應該匹配1個release 一定要平衡.

零基礎學python 3 5 記憶體管理

變數無需事先宣告 變數無需指定型別 程式猿不用關係記憶體管理 變數名會被 del能夠直接釋放資源 1.python使用的是引用呼叫,而不是值呼叫,他使用的 演算法是引用計數演算法,我以下舉兩個樣例 x 4 y 4 alist 1,2,3 blist 1,2,3 print x is y print ...

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

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