辦公室照明問題:在辦公室照明裝置只有乙個情況下,a進入辦公室,開燈(生成物件),需要照明(持有物件),b進入辦公室,需要照明(持有物件),當b離開辦公室,即不需要照明時(釋放物件),由於a還在需要照明,故燈還是開啟狀態,當a也離開辦公室,辦公室內沒有人需要照明(釋放物件),則燈關閉(廢棄物件);
故所以,引用計數相當於這裡的需要照明人的個數,需要照明則retain,不需要照明則release,當人數=0時,物件自然廢棄(dealloc)其中,記憶體管理有以下幾種思考方式1.自己生成的物件,自己持有使用以下名稱開頭的方法名,意味著自己生成物件且自己持有:
包含上面字首的方法也一位置自己生成物件且自己持有:但對於以下名稱,即使使用alloc,new,copy,mutablecopy開頭,但不屬於同一類別方法/**
自己生成並持有物件
*/id obj = [[nsobject alloc]init];
其中copy方法基於nscopying協議,由各類實現copywithzone:方法生成並持有物件。同樣mutablecopy方法基於nsmutablecopying協議,由各類實現copywithzone:方法生成並持有物件。用這些方法生成的物件雖然是副本,但同alloc,new一樣,在自己生成自己持有這點上並沒有區別。2.非自己生成的物件,自己也能持有使用非上面所敘述的 alloc/new/copy/mutablecopy方法所取得的物件,則是非自己生成,但自己持有3.不再需要自己持有的物件時釋放//取得非自己生成,但持有的物件
id obj = [nsarray array];
//自己持有 retain
[obj retain];
主要是弄清release與autorelease的區別//自己生成並持有
id obj = [[nsobject alloc]init];
//釋放
[obj release];
//自己生成並持有
id obj = [[nsobject alloc]init];
//取得物件存在 但自己不持有物件
4.無法釋放非自己持有的物件
//自己生成並持有物件
id obj = [[nsobject alloc]init];
//obj 釋放 自己不再持有
[obj release];
//崩潰 釋放之後再次釋放已非自己持有物件
[obj release];
更多底層alloc,copy等底層實現檢視 《objective-c高階程式設計 ios與osx多執行緒和記憶體管理》,本文內容大多撰自此書
ios學習筆記之記憶體管理
一,記憶體管理型別定義 1,基本型別 任何c的型別,eg int,short,char,long,long long,struct,enum,union等屬於基本型別或結構體 記憶體管理對於c語言的基本型別無效 2,oc型別 非基本型別 任何繼承於nsobject類的物件都屬於oc型別 也就是除了c...
黑馬IOS學習總結1 記憶體管理
1 基本理論 alloc new mutable copy 這三者會使計數器 1 retain 返回其呼叫的物件本身 示例 person p person alloc init retaincount 為1 p是在棧記憶體中,其內儲存著指向堆記憶體中開創出來的person物件位址的值。p retai...
IOS 學習筆記14 記憶體管理(2)記憶體管理策略
文章中帶有lpstudy的字樣表明是我個人的理解,可能會有不對的地方,敬請指教。html view plain copy 記憶體管理策略 在引用計數機制下,你可以採用nsobject protocol的方法和和標準的方法命名約定進行記憶體管理。nsobject也定義了乙個dealloc方法,它在物件...