本文是觀看了 @M了個J 視頻 整理的一些學習資料 在這裏感謝大神[(@M了個J) 大神博客鏈接的地址爲 http://www.cnblogs.com/mjios/] 在這裏謝謝大神,同時也謝謝那些無私奉獻知識的人 如果說我比別人看得更遠些,那是因爲我站在了巨人的肩上 --牛頓
範圍:
任何繼承了NSObject的對象,對基本數據類型無效
原理:
每個對象內部都保存了一個與之相關聯的整數,稱爲引用計數器
當使用alloc、new或者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.誰創建,誰釋放(“誰污染,誰治理”)。如果你通過alloc、new或(mutable)copy來創建一個對象,那麼你必須調用release或autorelease。換句話說,不是你創建的,就不用你去釋放
2.一般來說,除了alloc、new或copy之外的方法創建的對象都被聲明瞭autorelease
3.誰retain,誰release。只要你調用了retain,無論這個對象是如何生成的,你都要調用release