標籤:
為什麼要進行記憶體管理? 由於行動裝置的記憶體極其有限,所以每個APP所佔的記憶體也是有限制的,當app所佔用的記憶體較多時,系統就會發出記憶體警告,這時需要回收一些不需要再繼續使用的記憶體空間,比如回收一些不再使用的對象和變數等。
OC記憶體管理方式? OC的記憶體管理不同於其他進階語言如C#、Java都是通過記憶體回收機制,ObjC記憶體管理採用引用計數機制。 管理範圍:任何繼承NSObject的對象,對其他的基礎資料型別 (Elementary Data Type)無效。
什麼是引用計數? 引用計數機制:在ObjC中每個對象內部都有一個與之對應的整數(retainCount),叫“引用計數器”,當一個對象在建立之後它的引用計數器為1,當調用這個對象的alloc、retain、new、copy方法之後引用計數器自動在原來的基礎上加1(ObjC中調用一個對象的方法就是給這個對象發送一個訊息),當調用這個對象的release方法之後它的引用計數器減1,如果一個對象的引用計數器為0,則系統會自動調用這個對象的dealloc方法來銷毀這個對象。
什麼是自動引用技術? 自動引用計數:指記憶體管理中對引用採取自動計數的技術。蘋果官方說明如下:在Objective-C中採取Automatic Refrence Counting(ARC)機制,讓編譯器來進行記憶體管理。“在LLVM編譯器中設定ARC為有效狀態,就無需再次鍵入retain或者release代碼”換言之,滿足以下條件無需手動輸入retain和release代碼了。1.使用Xcode4.2以上版本;2.使用LLVM編譯器3.0或者以上版本;3.編譯器選項中設定ARC為有效。滿足以上條件,編譯器將自動管理記憶體。 注?若需要在Xcode中關閉ARC:項目屬性—Build Settings--搜尋“garbage”找到Objective-C Automatic Reference Counting設定為No即可。
記憶體管理原則?
原則1
只要還有人在使用某個對象,那麼這個對象就不會被回收;
只要你想使用這個對象,那麼就應該讓這個對象的引用計數器+1;
當你不想使用這個對象時,應該讓對象的引用計數器-1;
原則2 誰建立,誰release
(1)如果你通過alloc,new,copy來建立了一個對象,那麼你就必須調用release或者autorelease方法
(2)不是你建立的就不用你去負責
原則3 誰retain,誰release
只要你調用了retain,無論這個對象時如何產生的,你都要調用release
總結:有始有終,有加就應該有減。曾經讓某個對象計數器加1,就應該讓其在最後-1.
Objective-C 記憶體管理機制