OC的記憶體管理

2021-08-17 09:33:44 字數 1147 閱讀 4702

程式在執行的過程中通常通過以下行為,來增加程式的的記憶體占用。

每個軟體所能占用的記憶體也是有限的當程式所占用的記憶體較多時,系統就會發出記憶體警告,這時就得**一些不需要再使用的記憶體空間。比如**一些不需要使用的物件、變數等如果程式占用記憶體過大,系統可能會強制關閉程式,造成程式崩潰、閃退現象,影響使用者體驗。

所以,我們需要對記憶體進行合理的分配記憶體、清除記憶體,**那些不需要再使用的物件。從而保證程式的穩定性。

那麼,哪些物件才需要我們進行記憶體管理呢?

這是因為

提供給objective-c程式設計師的基本記憶體管理模型有以下3種:

蘋果是採用引用計數的原理進行記憶體管理的,當使用alloc、new或copy建立乙個物件時,物件的引用計數為1;當物件呼叫retain時,引用計數會加1;當物件呼叫release或autorelease時,引用計數會減1;當物件的引用計數為0的時候,會呼叫dealloc方法,銷毀物件。

只要乙個物件被釋放了,我們就稱這個物件為殭屍物件(不能被使用的物件);當乙個指標指向乙個殭屍物件(不可用的記憶體),則稱這個指標為野指標,給野指標傳送訊息就會報錯(exc_bad_access錯誤),為了避免野指標傳送訊息報錯,物件釋放時,會將物件設定為nil,向空指標傳送訊息沒有任何反應。

當我們不再使用乙個物件時,需要將其記憶體釋放,但是有時候我們不知道應該何時釋放,為了解決這個問題,oc提供了autorelease的方法。

autorelease是一種支援自動引用計數的記憶體管理方式,只要給物件傳送一條autorelease的訊息,該物件就會被放入到自動釋放池中,當自動釋放池銷毀的時候,會對池裡的所有的物件做一次release的操作。(只有當引用計數為0的時候,物件才會被銷毀)

autorelease方法會返回物件自身,呼叫完autorelease方法後,物件的引用計數不變。

好處:不用關心物件釋放的時間

原理實質:把release的呼叫延遲了,對於每乙個autorelease,系統只是把物件放入到了autorelease pool中,當pool釋放的時候,pool中的所有物件都會呼叫release。

自動引用計數,ios5推出的,用來解決手動管理記憶體的麻煩。

使用arc後,系統會自動檢測何時需要保持物件,何時需要釋放物件,編譯器會管理好記憶體,會在合適的地方插入retain、release或autorelease,通過生成正確的**去保持物件或釋放物件。

oc的記憶體管理

記憶體管理在oc中是非常重要的,如果乙個專案記憶體沒有管理好,那麼整個專案已經是沒有用了。所以記憶體管理是非常重要的。那麼為什麼要進行記憶體管理呢?由於移動裝置的記憶體極其有限,所以每個 所佔的記憶體也是有限制的,當 所占用的記憶體較多時,系統就會發出記憶體警告,這時需要 一些不需要再繼續使用的記憶...

Oc 記憶體管理

1 對你自己擁有的物件負責,你只能釋放你擁有的物件 2 凡是你通過 retain alloc copy等手段獲得了所有者的物件,都必須在你不使用的時候來呼叫release autorelease等手段來釋放對他的所有權 3 在一定的 段內,對同乙個物件所作的copy alloc retain的操作次...

OC記憶體管理

1.記憶體管理原則 如果對乙個物件使用了alloc mutable copy retain,那麼你必須使用相應的release或者autorelease。2.管理範圍 任何繼承了nsobject 的物件,對其他基本資料型別 int char float double struct enum等 無效 ...