一、 記憶體管理基本原理:
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 與 之間無空格,且輸出之後自動換行 ...