每個物件都有乙個引用計數器(4位元組)
1.引用計數為0的時候物件就會被銷毀(記憶體被**),不為0就不會被銷毀,除非程式退出
2.物件剛建立的時候引用計數為1
引用計數器的數值怎麼計算
1.建立物件時候預設就是1(alloc, new, copy)
2.給物件傳送一條retain訊息 加1
3.給物件傳送一條release訊息 減1
4.給物件傳送一條retaincount訊息 獲取計數器的數值
物件銷毀
銷毀的前提:引用計數器為0
銷毀時做的事情:呼叫dealloc方法
(一定要呼叫[super dealloc])
當物件不存在時不可以再relese 和retain
指向不可以記憶體的指標:野指標錯誤
非arc環境下 [super dealloc]必須寫
多個物件使用同乙個物件,這個物件的引用計數是由這多個物件來控制的,誰使用誰加一,誰不使用誰減一
setdog中
_dog = [dog retain];
記憶體管理就是確保開闢的堆空間被正確的釋放
**法則
1.凡是用alloc, retain, new (或使用new開頭的方法),copy(或使用copy開頭的方法),nsmutablecopy (或使用nsmutablecopy開頭的方法)建立的物件都必須使用release或autorelease方法釋放。
2.誰建立誰釋放(哪個類建立,哪個類釋放,誰寫alloc,誰寫release)
if(_crayfish != crayfish)
_crayfish = [crayfish retain];
非arc環境下 dealloc要自己手動釋放
retain 物件,assign非物件
@property(nonatomic,retain) nsstring *str;
淺拷貝:拷貝指標
深拷貝:物件拷貝
retain只是計數器加一,還是同乙個物件
copy拷貝的物件不可以被修改
nsmutablecopy拷貝的物件可以背修改
mrc物件的釋放看當前物件的引用計數
arc物件的釋放看當前物件有被強引用
__weak弱指標 雖然引用 但是不指向 銷毀物件時不考慮弱指標
相互呼叫時必須有乙個是弱引用
ios記憶體管理
引用計數 每個物件有乙個與之相關的整數,稱作 引用計數器 或者 保留計數器 當某段 需要訪問乙個物件時,該段 會將物件的保留計數器 1,表示需要訪問這個物件 當結束對該物件的訪問時,保留計數器 1,表示它不在訪問該物件 當保留計數器為0時,物件被銷毀,所佔記憶體被系統收回。當使用new retain...
iOS記憶體管理
前提 1 以下是針對cocoa物件,不包括core foundation 2 cocoa物件都是用引用計數來跟蹤物件的記憶體使用情況的。3 在子類裡面父類先初始化和後釋放的原則。自己想下為什麼 棧空間和堆空間的區別。我們說的記憶體管理都是基於堆空間的,因為函式內的棧空間是由編譯器自己控制的。關於co...
IOS 記憶體管理
範圍 任何繼承了nsobject的物件,對基本資料型別無效 原理 每個物件內部都儲存了乙個與之相關聯的整數,稱為引用計數器 當使用alloc new或者copy建立乙個物件時,物件的引用計數器被設定為1 給物件傳送一條retain訊息,可以使引用計數器值 1 給物件傳送一條release訊息,可以使...