OC 記憶體管理

2021-07-06 06:10:11 字數 1548 閱讀 9101

簡單地說就是, 系統自動對記憶體進行管理, 自動新增 retain 和 release 方法. 而不再需要程式設計師手動新增. 這裡暫時不做詳細介紹.

需要程式設計師自己寫 retain 和 release 方法來進行記憶體管理. 下面就對在 mrc 中用到的有關記憶體管理的方法(在 arc 中不能使用)做乙個總結.(以 person 類為例)

該方法可獲得物件空間中的引用計數, 返回值為 nsuinteger.

person *per = [[person alloc] initwithname:@"zhangsan" gender:@"man" age:18];

person *per1 = [per retain];//使用 retain 將per 的值賦給 per1

nslog(@"%lu", [per1 retaincount]);//輸出結果為 : 2

nslog(@"%lu", [per retaincount]); //輸出結果為 : 2

nslog(@"%lu", per); //per 的位址為 : 0x100400220

nslog(@"%lu", per1);//per1的位址為 : 0x100400220

person *per = [[person alloc] initwithname:@"zhangsan" gender:@"man" age:18];

person *per1 = [per copy];//使用 copy 將per 物件的值賦給 per1物件

nslog(@"%lu", [per1 retaincount]);//輸出結果為 : 1

nslog(@"%lu", [per retaincount]); //輸出結果為 : 1

nslog(@"%lu", per); //per 的位址為 : 0x100120db0

nslog(@"%lu", per1);//per1的位址為 : 0x100120c10

由上兩例可知:

如果要使用 copy 方法的話, 就需要 person 類遵循 nscopying 協議. 並將copywithzone重寫, 重寫方法如下:

// 該方法在使用 copy 時, 自動呼叫

- (id)copywithzone:(nszone *)zone

release 方法在呼叫之後立即釋放記憶體, 且在呼叫該方法之後不能再呼叫 retaincount 方法, 否則系統會立即崩潰. 使用方法:

[per release]

;

autorelease 方法在呼叫之後不會立即釋放記憶體, 如果 autorelease 在乙個自動釋放池裡, 那麼在釋放池結束時, 會順道將 autorelease 要釋放的記憶體釋放掉. 使用方法:

[per autorelease]

;

alloc 可以申請出一塊位址, 而dealloc 是對堆區記憶體空間**.

dealloc 的使用方法如下:

- (void)dealloc

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等 無效 ...

OC 記憶體管理

管理範圍 任何繼承nsobject的物件,對其他的基本資料型別無效。判斷物件要不要 的唯一依據就是計數器是否為0,若不為0則存在。所以對記憶體的管理就是對計數器的管理 1 retain 計數器 1,會返回物件本身 2 release 計數器 1 沒有返回值 3 retaincount 獲取當前的計數...