Object-C內存管理

本文是觀看了 @M了個J 視頻  整理的一些學習資料   在這裏感謝大神[(@M了個J) 大神博客鏈接的地址爲  http://www.cnblogs.com/mjios/] 在這裏謝謝大神,同時也謝謝那些無私奉獻知識的人   如果說我比別人看得更遠些,那是因爲我站在了巨人的肩上 --牛頓

範圍:

任何繼承了NSObject的對象,對基本數據類型無效

原理:

每個對象內部都保存了一個與之相關聯的整數,稱爲引用計數器

當使用allocnew或者copy創建一個對象時,對象的引用計數器被設置爲1

給對象發送一條retain消息,可以使引用計數器值+1

給對象發送一條release消息,可以使引用計數器值-1

當一個對象的引用計數器值爲0時,那麼它將被銷燬,其佔用的內存被系統回收,OC也會自動向對象發送一條delloc消息。一般會重寫dealloc方法,在這裏釋放相關資源。一定不要直接調用dealloc方法

可以給對象發送retainCount消息獲得當前的引用計數器值 

java中如何管理內存:

Public void test () {

Object o = new Object ();

}

當方法test() 方法調用完畢之後  o被自動釋放  java的垃圾回收機制會檢測是否有對象在引用它 如果沒有對象引用它  它就把內存給回收了  

IOS中如何管理內存:



當一個對象的引用計數器值爲0時,那麼它將被銷燬,其佔用的內存被系統回收,OC也會自動向對象發送一條delloc消息。一般會重寫dealloc方法,在這裏釋放相關資源。一定不要直接調用dealloc方法


後臺結果:


內存管理法則

1.誰創建,誰釋放(“誰污染,誰治理”)。如果你通過allocnew或(mutable)copy來創建一個對象,那麼你必須調用releaseautorelease。換句話說,不是你創建的,就不用你去釋放

2.一般來說,除了allocnewcopy之外的方法創建的對象都被聲明瞭autorelease

3.誰retain,誰release。只要你調用了retain,無論這個對象是如何生成的,你都要調用release


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章