OC記憶體管理的初級理解

2021-06-23 05:34:33 字數 924 閱讀 2866

***自己每開闢一次空間,自己要對其(自己開闢的)進行釋放;對引用計數+1,相應的也要對引用計數-1;不必管系統對空間的操作,系統會對其進行處理.

1.能讓引用計數改變的五個方法

(1)+alloc開闢記憶體空間,將物件的引用計數+1

(2)-retain將物件的引用計數+1

(3)-copy

(4)-release將物件的引用計數立即-1

(5)-autorelease將物件的引用計數-1(不是立即的,將來的某個時刻)

autorelease

會將宣告為

autorelease

的物件放入離他最近的自動釋放池中

,當自動釋放池銷毀時

,會向池中的每乙個物件傳送乙個

release訊息

2.當引用計數為0時

,系統會自動**記憶體

,我們只管理引用計數

3.改變引用計數可能帶來的問題

(1)過渡釋放

現象:如果引用計數為0時,當寫完和記憶體引用計數-1有關的操作後,程式立即crash

原因:空間被系統**之後,不能再做和引用計數-1有關的操作,否則會立即crash

解決方案:刪除釋放空間操作

(2)野指標異常:

現象:當空間被釋放後,繼續用指標變數(物件)訪問該空間,可能會崩潰,也可能不會崩潰,寫到某一行**時突然崩潰(沒有寫任何和引用計數相關的**)

產生原因:該物件的空間已經被系統**,不能再訪問沒有所有權的物件

解決方案:空間被系統**之後,禁止訪問

4.記憶體管理基本原則

如果你對乙個物件進行alloc,retain,copy之後,你就擁有了該物件的所有權,你就必須對它進行release或者autorelease(也就是自己每寫乙個alloc,retain,copy之後,就必須對它進行release或者autorelease)

OC 記憶體管理初級

法則 如果對乙個物件進行了alloc retain copy之後,就擁有了該物件的所有權,就必須對它進行release或者autorelease alloc 引用計數0 1 retain 引用計數 立即 1 copy release 引用計數 立即 1 autorelease 配合 autorele...

oc的記憶體管理初級

建立乙個person類在.h,宣告屬性 凡是語義設定使用了retain copy的屬性,其對應的例項變數都需要在dealloc方法裡面release一次 property nonatomic copy nsstring hobby property nonatomic retain nsstring...

OC記憶體管理初級演練

alloc 開闢記憶體空間,並且將物件的引用計數由0變1.person per1 person alloc init 0 1 retaincount 用來獲取當前物件的引用計數 nslog lu per1 retaincount retain 將物件的引用計數加一 person per2 per1 ...