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 ...