***自己每開闢一次空間,自己要對其(自己開闢的)進行釋放;對引用計數+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 ...