iOS學習筆記基礎 oc06記憶體管理

2021-06-25 15:51:34 字數 1223 閱讀 3832

一、  記憶體管理基本原理:

1、    棧存放區域性變數,系統自動**。堆存放動態產生的儲存變數,需要手動**。

2、    任何繼承了nsobject的物件都需要進行記憶體管理。

3、    每個oc物件都有自己的引用計數器,表示物件引用的次數,每個物件內部都有4個位元組儲存空間來儲存引用計數器。

4、    引用計數器的作用:當使用alloc、new或者copy建立乙個新物件時,新物件的引用計數器預設就是1;

當乙個物件的引用計數器值為0時,物件占用的記憶體就會被系統**。換句話說,如果物件的計數器不為0,那麼在整個程式執行過程,它占用的記憶體就不可能被**,除非整個程式已經退出。

5、    retain方法返回的是物件本身。

6、    引用計數器的操作:給物件傳送一條retain訊息,可以使引用計數器值+1(retain方法返回物件本身);

給物件傳送一條release訊息,可以使引用計數器值-1;

可以給物件傳送retaincount訊息獲得當前的引用計數器值;

7、    exc_bad_access:野指標錯誤,訪問了一塊壞的記憶體(已經被**、不可用的記憶體)。oc中不存在空指標錯誤,給空指標傳送訊息,不報錯。[ nil  release ]有警告,但不會出錯。

8、    殭屍物件:所占用記憶體已經被**的物件,殭屍物件不能再使用;

野指標:指向殭屍物件的指標,給野指標傳送訊息會報錯;

空指標:沒有指向任何東西的指標(儲存nil,null,0),給空指

針傳送訊息不會報錯。

9、    物件的銷毀:當乙個物件的引用計數器值為0時,那麼它將被銷毀,其占用的記憶體被系統**;

當乙個物件被銷毀時,系統會自動向物件傳送一條dealloc訊息;

一般會重寫dealloc方法,在這裡釋放相關資源,deslloc就像物件的遺言;

一旦重寫了dealloc方法,就必須呼叫[super dealloc],並且放在最後面呼叫;

一旦物件被**了,它占用的記憶體就不再可用,堅持使用會導致程式崩潰(野指標錯誤)。

二、  記憶體管理的原則:

1、只要還有人在使用這個物件,那麼物件就不會被**;只要想使用這個物件,就讓物件的引用計數器加1;不在使用這個物件時,物件的引用計數器減1.

2、誰建立,誰release。通過alloc、new、copy來建立乙個物件,必須呼叫release或者autorelease。

3、誰ratain(物件計數器加1,返回的是物件本身)誰release(物件計數器減1)。

iOS開發學習筆記 OC基礎

for int i 0 i items count i for nsstring item in items 快速列舉的限制 如在迴圈體中增加或刪除物件,則不能使用快速列舉,這時只能用for迴圈。nslog函式負責將指定字串輸出到xcode控制台。nslog的實參個數並不確定,但第乙個實參是必須的,...

IOS學習 OC記憶體管理

記憶體管理 引用計數器 oc物件被引用的次數,為0的時候該物件被銷毀,記憶體 retain 引用次數 1 返回的是物件本身 release 引用次數 1 沒有返回值 retaincount 獲取引用次數。dealloc oc物件被銷毀的時候會呼叫dealloc方法,繼承該 方法 放最後面 super...

IOS學習 OC基礎學習1

oc 在c的基礎上增加了一層最好的物件導向語法 副檔名.m 基本語法 1 關鍵字 基本上所有的關鍵字都是以 開頭 2 字串一 開頭 其他與法 引進了bool型別 yes,no nil 相當於c語言中的null,也是0 nslog hello nslog d 27 與 之間無空格,且輸出之後自動換行 ...