02 引用計數器的使用 含野指標 空指標

2022-07-17 16:12:14 字數 2603 閱讀 5164

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

計數器 通用計數器的應用價值

隨著科學技術發展,一些應用系統,如大型通訊系統,電力系統,特別是高速運動目標的跟蹤定位系統,對時間間隔的測量精度提出了越來越高的要求,同時我國對時間間隔計數器的應用掌控性,更傾向於依賴於國產裝置實現數字式頻率計的研發。雖然通用計數器測量週期誤差不可能從根本上消除,但通過對轉換誤差 量化誤差及各類誤差...