iOS基礎 ----- 記憶體管理

來源:互聯網
上載者:User

標籤:

  Objective-C 的記憶體管理方式有引用計數機制,記憶體回收機制,自動釋放池。有alloc,就有釋放。iOS應?程式出現Crash(閃退),90%的原因是因為記憶體問 題。在?個擁有數?個甚?是上百個類的?程?,尋找記憶體問 題極其困難,學會記憶體管理,能幫我們減少出錯的?率。記憶體問題體現在兩個??:記憶體溢出、野指標異常。

引用計數器

  在Xcode4.2及之後的版本中由於引入了ARC(Automatic Reference Counting)機制,程式編譯時間Xcode可以自動給你的代碼添加記憶體釋放代碼,如果編寫手動釋放代碼Xcode會報錯,因此在今天的內容中如果你使用的是Xcode4.2之後的版本(相信現在大部分朋友用的版本都比這個要高),必須手動關閉ARC,這樣才有助於你理解ObjC的記憶體回收機制。ObjC中的記憶體管理機制跟C語言中指標的內容是同樣重要的,要開發一個程式並不難,但是優秀的程式則更測重於記憶體管理,它們往往佔用記憶體更少,運行更加流暢。雖然在新版Xcode引入了ARC,但是很多時候它並不能完全解決你的問題。在Xcode中關閉ARC:項目屬性—Build Settings--搜尋“garbage”找到Objective-C Automatic Reference Counting設定為No即可。

 引用計數又分ARC(Auto Reference Counting) 自動引用計數 和 MRC(Manual Reference Counting) 人工引用計數。

 自動引用計數:iOS 5.0的編譯器特 性,它允許?戶只開闢空間,不?去釋放空間。它不是垃圾回 收!它的本質還是MRC,只是編譯器幫程式員預設加了釋放的 代碼。

 記憶體的開闢和釋放 都由程式碼進?控制。相對記憶體回收來說,對記憶體的控制更 加靈活,可以在需要釋放的時候及時釋放,對程式員的要求較 ?,程式員要熟悉記憶體管理的機制。

 記憶體回收機制  

   程式員只需要開闢記憶體空間,不需要?代碼的 形式釋放,系統來判斷哪些空間不再被使?,並回收這些記憶體 空間,以便再次分配。整個回收的過程不需要寫任何代碼,由 系統?動完成記憶體回收。Ja─a開發中?直使?的就是記憶體回收 技術。

 

 

    OC采?引?計數機制管理記憶體,每個對象都有?個引? 計數器,?來記錄當前對象的引?次數。 當?個新的引?指向對象時,引?計數器就加1,當去掉 ?個引?時,引?計數就減1。當引?計數到零時,該對 象的空間就被系統回收。 retainCount擷取對象的引?計數。

 例如,廁所進去一個人,引用計數就要加1,出來一個人就要減1,等人全部出來後就變成了0,相當於釋放掉了,被系統回收了。

 

影響引用計數的方法

1、 + alloc 開闢記憶體空間,讓被開闢的記憶體空間的引?計數 從0變為1。

2、 - retain 引?計數加1,如果對象之前引?計數為1,retain 之後變為2,如果引?計數是5,retain 之後變為6。

3、 - copy 把某?對象的內容拷貝?份,拷貝出新的對象, 原有對象的引?計數不變,新的對象的引?計數變1。

 

釋放記憶體

iOS5之前,使? NSAutoreleasePool ?動釋放池類建立對象。

iOS5之後,不再推薦使? NSAutoreleasePool 類,使? @autoreleasepool{}替代。

出了大括弧,自動釋放池才向各個對象發送release訊息。

iOS基礎 ----- 記憶體管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.