OC重新開始(五)記憶體管理MRC

2021-09-09 07:28:54 字數 1474 閱讀 8646

在程式裡,若執行過程中不但不能釋放不在使用的記憶體反而會不停的分配記憶體這樣占用的記憶體會越來越多,程式速度會越來越慢最後甚至會崩潰

在指標所指向的物件已經被釋放或**的情況下,改指標被稱為野指標懸垂指標,繼續使用這樣的指標會造成程式崩潰

oc中通過向類物件傳送alloc訊息來生成例項物件,alloc的作用就是分配記憶體,而它的返回值是id型別,因為id型別就是指標型別

oc中的記憶體管理

引用計數每個物件都有乙個與之相關的整數,稱為引用計數,若需要使用物件則物件的計數器加1,當不使用的時候計數器減1.

當alloc和初始化方法建立乙個物件的時候,該物件的引用計數的初始值為1,若需要持有乙個例項的話需要給例項傳送retain訊息,每次retain訊息之後引用計數器加1。

若不需要物件的時候傳送release訊息,引用計數減1,oc自動向物件傳送一條dealloc訊息來釋放記憶體。(需要注意的是dealloc是例項方法而不是像alloc的類方法)。

需要用乙個例項的話必須傳送retain訊息持有它,不然可能會異常。

(int)[obj retaincount]//方法返回的是nsuinteger需要型別轉化獲取當前計數的值
- (void)dealloc
oc中有一種自動釋放的機制,它的基本就是把要傳送的release訊息記錄下來,需要釋放物件的時候,給這些物件一起發release訊息,而類nsautoreleasepool(自動釋放池)起到了記錄的作用。

首先生成乙個nsautoreleasepool的例項物件,當乙個物件傳送autorelease訊息的時候,就會將該物件新增到nsautoreleasepool中,並標記以後釋放

id pool = [[nsautoreleasepool allloc]init];

/* 給臨時物件傳送autorelease訊息

*/[pool release] //銷毀自動釋放池,裡面所有物件被銷毀

注意的是在乙個大型迴圈內會在開始的時候建立自動釋放池來提高記憶體利用率,但是如果在中途通過continue或者break跳出的時候,會導致自動釋放池沒有釋放。

常量物件沒有引用機制永遠不會被釋放

OC重新開始(八)屬性

一般來說屬性指的是乙個物件的屬性或特徵。類似於乙個籃球把它當做乙個物件的話,籃球的 大小就是它的屬性。而在oc中屬性還被賦予了從外部可以訪問的物件的屬性。能自動生成訪問方法 自動生成例項變數 更簡單的呼叫訪問方法 屬性的內省 屬性的宣告相當於同時宣告了讀寫兩個訪問方法。通過 property編譯器命...

重新開始忙碌!!!

本以為可以繼續輕鬆到六月份去公司上班,剛剛接到的乙個 又把我拉上了快車道。公司部門的老大讓我盡快去公司實習,下週就要開始,每週三天。唉,又要開始一段非常忙碌的日子了!畢業 還沒有開始寫,又剛報了駕校學駕駛,現在還要去公司實習,每星期三天!天呢,從12月份輕鬆到現在整整三個月,看來我又要忙碌起來了.本...

重新開始學彙編

突然間在書房裡面找到了一本發黃的圖書,是自己在剛進高中的時候買的 組合語言程式設計 曾經的那份衝動不被遺忘,突然間的再次讓我熱血沸騰。於是我重新開始學習彙編,還好機器安裝了gas,ld。第乙個a 程式,比較簡單 2007.8.7 roland lee use dynamic lib to print...