Object C中管理記憶體

2021-08-26 06:25:10 字數 1555 閱讀 9854

object-c之中採用一種保留記錄的方式記錄我們所建立的所有的物件,並且,當該計數減少為0的時候,object-c自動收回分配給乙個物件的記憶體。

text *text1 = [[text alloc]init]; text *text2 = [[text alloc]init];

每乙個物件的計數都為1,我們可以通過retaincount方法對其進行輸出,如

printf("text1 retain count is %d",[text1 retaincount]);

retain為增加保留計數的方法,可以直接顯式的進行呼叫

[text1 retain];

例:retaincount.m

#import #import @inte***ce class1:nsobject @end @implementation class1 @end int main(void) 結果為

object1 retain count:1 object2 retain count:1

其中我們可以通過手動的增加或者減少保留計數來對物件進行管理

例:incrementcount.m

#import #import @inte***ce class1:nsobject @end @implementation class1 @end int main(void)

結果為 object1 retain count:1 object2 retain count:1 object1 retain count:3 object2 retian count:2

例:decrementcount.m

#import #import @inte***ce class1:nsobject @end @implementation class1 @end int main(void)

結果為 object1 retain count:1 object2 retain count:1 object1 retain count:3 object2 retian count:2 object1 retain count:2 object2 retain count:1

當物件的保留技術達到0的時候,object-c從記憶體中收回物件

例:dealloc.m

#import #import @inte***ce class1:nsobject @end @implementation class1 @end int main(void)

結果為 object1 retain count:1 object2 retain count:1 object1 retain count:3 object2 retian count:2 object1 retain count:2 object2 retain count:1 deallocing the object deallocing the object

object中還存在著自動釋放池的概念,對於不是使用alloc或new建立的物件,我們可以讓object-c使用自動釋放池管理。

簡單的說,就是如果建立乙個物件,那麼再釋放物件的時候,物件中的所有屬性也會同時一併被釋放。

例 #import #import int main()

Object C 中的記憶體管理

當你呼叫alloc init的時候,你得到乙個引用計數是1的物件。當你用完這個物件之後,你要對它呼叫release訊息,使其引用計數為0,這樣它的記憶體才會被釋放掉。當你呼叫乙個方法,它不是以init或者copy開頭的,這時,返回給你的物件是autorelease的,它是一種在將來某個時刻會自動被釋...

Object c記憶體管理

記憶體管理 物件的生命週期包括以下幾個時期 物件初始化 物件接收訊息和執行操作 物件被釋放 判斷乙個物件是否結束,用到引用計數器 引用計數器的基本概念 1 每個人物件有乙個整數值,這個整數值與物件本身關聯,稱為引用計數器 2 當某些地方需要使用這個物件時,可以將引用計數器加1,表示使用這個這個物件 ...

Object C 記憶體管理

object c 記憶體管理 一 基本概念 1.iphone系統中的objective c的記憶體管理機制是比較靈活的,即可以拿來像c c 一樣用,也可以加個autoreleasepool讓它公升級為半自動化的記憶體管理語言 2.引用計數是例項物件的記憶體 唯一參考 引用計數 retaincount...