由於xcode6.0.1中預設開啟arc
(automatic reference counting 自動引用計數器),
在學習arc之前,我們需要做以下兩步:
(1)要想手動管理記憶體,呼叫retain 、 release等方法,需要關閉arc:
(2)預設情況下,xcode是不會管殭屍物件的,使用一塊被釋放的記憶體也不會報錯。為了方便除錯,應該開啟殭屍物件監控
第1步:
第2步:
第3步:
ios程式中需要程式不斷處於執行狀態,因此ios程式的main函式是乙個死迴圈,除了使用者控制退出程式可以釋放記憶體,程式設計師還可以通過**來釋放(呼叫方法)。
一、基本使用
(1)當使用alloc建立乙個新物件時,新物件的計數器值預設是1
(2) 給物件傳送一條retain訊息,可以使計數器值+1(retain方法返回物件本身)
(3)給物件傳送一條release訊息,可以使計數器值-1
(4)驗證物件記憶體是否被**
super的dealloc 必須呼叫,而且要放在最後面。
二、野指標、空指標
1、野指標:指向殭屍物件(不可用記憶體)的指標。
分析:1> 當執行完第8行**,計數器值變為0。person物件被**,它所占用的記憶體變為不可用,這時person物件就成為殭屍物件。
2> 雖然person物件被**,但是指標變數p儲存的位址值沒有清空,它還是指向person物件原來所占用的記憶體空間,而這個空間此刻已經變為不可用記憶體,這個時候,指標變數p就成為野指標。
(1)如果對野指標繼續呼叫release方法,就會出現野指標錯誤:
exc_bad_access 訪問了一塊壞的記憶體(已經被**、已經不可用的記憶體) 也稱為野指標錯誤。
(2)呼叫野指標的方法,出現野指標錯誤
-[person setage:]: message sent to deallocated instance 0x100203210
表示傳送一條- setage: 訊息 給了已經被釋放的物件。
(3) 對乙個殭屍物件使用retain方法
當物件被**,變成殭屍物件後,不能通過retain方法使其變為可用。即 物件不能死而復生。因為會出現野指標錯誤:
-[person retain]: message sent to deallocated instance 0x100203210
給已經被釋放的物件傳送 - retain訊息。
2、空指標
空指標:沒有指向任何東西的指標(不指向任何物件)。
上例中,當計數器值為0時,物件被**,但是指標變數p還儲存著物件的位址,指向一塊不可用的記憶體,稱為野指標。
為了保證指標的乾淨,我們可以清空指標儲存的內容: 把nil賦值給指標變數
注意:oc中沒有空指標錯誤,給空指標呼叫方法不會報錯:
三、引用計數器總結
1、方法的使用
(1)retain : 計數器 +1,會返回物件本身。
(2)release : 計數器 -1,沒有返回值。
(3)retaincount : 獲取當前的計數器值。
(4)dealloc:物件被銷毀時被呼叫,一般會重寫dealloc方法。
1> 當乙個物件要被**的時候,就會呼叫。
2> 一定要呼叫[super dealloc],這句呼叫要寫在最後面。
2、理解概念
(1)殭屍物件:所占用記憶體已經被**的物件,殭屍物件不能再使用。
(2)野指標: 指向殭屍物件(不可用記憶體)的指標。
(3)空指標: 沒有指向任何東西的指標(儲存的東西是nil、null、0),給空指標傳送訊息不會報錯,oc中沒有空指標錯誤。
自動引用計數器 一
自動引用計數器是指記憶體管理中引用採取自動計數的計數。一.記憶體管理的思考方式 思考方式分為四類 1.自己生成的物件,自己所持有。2.非自己生成的物件,自己也能持有。3.不在需要自己持有的物件時候釋放。4.非自己持有的物件無法釋放。生成並持有物件 alloc new copy mutablecopy...
引用計數器 與 記憶體管理
一 引用計數器的基本操作 1.方法的基本使用 1 retain 計數器 1,會返回物件本身 2 release 計數器 1,沒有返回值 3 retaincount 獲取當前的計數器的值 4 dealloc 當乙個person物件被 的時候,就會自動呼叫這個方法 void dealloc 2.概念 1...
計數器 通用計數器的應用價值
隨著科學技術發展,一些應用系統,如大型通訊系統,電力系統,特別是高速運動目標的跟蹤定位系統,對時間間隔的測量精度提出了越來越高的要求,同時我國對時間間隔計數器的應用掌控性,更傾向於依賴於國產裝置實現數字式頻率計的研發。雖然通用計數器測量週期誤差不可能從根本上消除,但通過對轉換誤差 量化誤差及各類誤差...