1箫柳、OC中的內存管理機制:引用計數
? ? ?每個對象都有引用計數手形。理論上:當對象的引用計數為0時,系統會自動調用方法悯恍,銷毀對象库糠,回收內存
? ? ?在開發(fā)中存在多個指針操作同一個對象, 如果不在需要使用對象涮毫,減少相應的引用計數
2瞬欧、內存管理的方式:
? ? ?(1)MRC(手動內存管理):人工引用計數,內存的開辟和釋放都由程序代碼進行控制罢防,相等垃圾回收來說艘虎,對內存的控制更加靈活,可以在內存需要釋放時及時釋放咒吐。
? ? ? (2)ARC(自動內存管理):自動引用計數野建,用戶可以不用去釋放空間
3、alloc ?引用計數加1(本質上從0——>?1)
? ? ? ?Person?*?p?=?[[Person?alloc]init];
? ? ? ? NSLog(@"%lu",?p.retainCount);//注: ?retainCount返回當前內存值
4恬叹、retain引用計數加1候生,在原有的基礎上增加
Copyright:zhangjianjun
5、copy引用計數加1绽昼;被拷貝的對象的引用計數不變唯鸭,新創(chuàng)建的對象從0增加到1
6、release引用計數減1硅确,在原有的基礎上減少
?例:
? ? [p?release];
? ?NSLog(@"%lu",p.retainCount);
? ?[p?release];
? NSLog(@"%lu",p.retainCount);
? [p?release];
? NSLog(@"%lu",p.retainCount);
//此時系統銷毀對象目溉,回收內存,此時菱农,指針p被稱為野指針缭付,不應該再使用指針p
//操作原對象調用方法,p?=?nil;?//
//由野指針直接換為空指針大莫,對nil操作不會出錯
? ? ?[p?release];
? ?NSLog(@"%lu",p.retainCount);??//打印結果為0;
7蛉腌、autorelease?引用計數減1,在未來的某個時刻減1只厘,如果想安全使用對象烙丛,可以通過對像調用
8、retain方法羔味,增加對象的引用計數河咽。持有(引用)對象
例:
? ?-?(void)setBook:?(Book?*)book
? {
? _book??=?[book?retain];}//加retain是為了代碼安全保證在調用Book?對象的時候其存在