OBJECT-C 內存管理


當使用alloc、new方法或者通過copy消息(生成接收對象的一個副本)創建一個對象時,對象的保留計數器值被設置爲1.要增加對象的保留計數器值,可以給對象發送一條retain消息。要減少對象的保留計數器值,可以給對象發送一條release消息。
-(void)dealloc;重寫用來釋放內存
NSObject 內存的幾個方法
-(id)retain;對象保留計數器值加1
-(void)release;對象保留計數器值減1
-(unsigned)retain count;獲取當前對象的保留計數器值
對象所有權:如果一個對象具有指向其他對象的實例變量,則稱該對象擁有這些對象
-(id)autorelease;所有對象全部入池,該方法預先設定了一條在將來某個時間發送的release消息,其返回值是接收消息的對象,retain消息採用了相同的技術,使嵌套調用更加容易。當給一個對象發送autorelease消息時實際上是將該對象添加到NSAutoreleasePool中。當自動釋放池銷燬時,會向該池中的所有對象發送release消息
內存管理規則:
1、當你使用new、alloc或copy方法創建一個對象時,該對象的保留計數器值爲1.當不再使用該對象時,你要負責向該對象發送一條release或autorelease消息。這樣,該對象將在其使用壽命結束時被銷燬。
2、當你通過任何其他方法獲得一個對象時則假設該對象的保留計數器值爲1,而且已經被設置爲自動釋放,你不需要執行任何操作來確保該對象被清理,如果你打算在一段時間內擁有該對象,則需要保留它並確保在操作完成時釋放它。
3、如果你保留了某個對象,你需要最終釋放或自動釋放該對象。必須保持retain方法和release方法的使用次數相等。
當希望在多個代碼中一直擁有某個對象。常見的方法是:如果你正在使用new 、alloc或copy方法獲得一個對象,則不需要執行任何其他操作,該對象的保留計數器值爲1,因些它將一直被保留,只是一定要在擁有該對象的dealloc方法中釋放該對象。
如果你使用除alloc、new 或copy以外的方法獲得一個對象,你需要保留該對象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章