肖斯瑤
(湖南省長沙市長郡中學 410002)
淺談IOS內存開發管理機制的應用
肖斯瑤
(湖南省長沙市長郡中學 410002)
ios是蘋果公司的主流操作系統,在目前網絡發展的背景下,ios的開發一直是業界研究的熱點。本文主要針對ios內存開發管理機制的應用進行分析。
ios系統;內存開發管理機制;應用
ios是蘋果公司的操作系統,來開發某些移動設備軟件所使用的。許多ios開發出來的軟件都是因為內存的泄露而崩潰,再加上移動設備本身內存有限,內存管理在ios開發中極為重要。所以了解ios內存開發管理機制對于開發者來說是非常有必要的。
任何對象的存在都不能離開其所有者單獨存在。如果沒有所有者,該對象就會被判斷為無效對象,被系統銷毀。為了明確對象的所有權義務,蘋果公司創建的編程環境Cocoa設立了一系列的判斷準則:
(1)所有權不是任何一個對象都能有的,它是需要一定條件的,最主要的是要對對象執行retain、new等操作,才能獲得其所有權。
(2)不要只是獲得所有權卻不釋放,如果不再需要某個對象的所有權,要及時釋放。可以通過release或者autorelease來實現所有權的釋放。
(3)如果沒有該對象的所有權,那么就不能對其實行釋放所有權操作。
所有權策略是在調用retain方法后通過保留計數實現的。每個對象創建完成后,為了記錄其所有權個數,系統會自動生成一個計數器供其使用,并且用此計數器管理對象的內存。當一個對象創建完成,計數器值等為1;將release消息發送給對象,計數器值減1;將retain消息發送給對象,計數器值加1;將autorelease消息發送給對象,在某個階段上計數器的值減1.若計數器值等于0,那么就會釋放該對象的內存。這些工作都是由一個名為dealloc的函數來執行的,每個對象都會有這樣一個方法。
(1)如果對象是通過copy、new等關鍵字創建的,并且其保留計數器值為1,則當再想使用該對象時,一定要向對象發送一條autorelease或release消息以便當該對象壽命結束時將其進行銷毀。
(2)如果對象是通過其他方法創建的,并且計數器保留的值為1,與此同時將其設置為自動釋放,要想一段時間內一直擁有這個對象,就必須想法保留住這個對象并且在操作完成時還要完成釋放。
(3)已經確定要保留某個對象,那應該考慮如何對其釋放。若想將保留下來的對象釋放,必須堅持release和retain的方法,并保持相同的使用次數。
自動釋放池其實就是一個用來實現內存自動回收的盛放對象的池子,它是NSAutoreleasePool的實例,它里面既包含自身定義的對象還包含接收到autorelease指令的對象。當自動回收池將被回收刪除時,它會給里面的每個對象都發一條release消息,其他情況還會一直保留著對象,這樣就會將對象的生命周期延長至自動釋放池自身被釋放。如果釋放池被刪除導致對象沒有了可用的釋放池,Cocoa還會記錄下相應的autorelease異常。
盛放自動釋放池的是一個一個的堆棧。棧頂存放的是新創建的自動釋放池,接收到autorelease消息的對象會被添加到棧頂的自動釋放池中,當釋放池被回收或者不能用時,就會被堆棧自動刪除。
大部分情況,程序的開發應用的是應用系統的開發包自帶的自動釋放池,但是以下情況,自帶的自動釋放池不能起到回收的作用,必須要使用自己的自動釋放池:
(1)程序編寫的方式不是用基于應用系統而開發出來的,比如通過命令行工具進行編寫的程序,它當然不能用應用系統的內置自動釋放池,必須自己建造自己的自動釋放池。
(2)如果生成一個從屬線程,當線程開始執行,就必須創建自己自動釋放池,因為在線程內創建的對象并不會在函數結束后自動釋放。
(3)如果很多對象被創建在一個循環里,最好在循環體內部創建一個自動釋放池以便于減少程序的最大內存占用量。
在這里主要介紹iPhone開發中內存管理常見的錯誤。
沒有使用存取方法。沒有存取方法的程序在一些簡單的情況下可以正常運行,但是當忘記了釋放或保留時或者當實例變量的內存管理語義發生錯誤時,如果沒有存取方法,程序就會發生錯誤。
內存泄露。當對象的保留計數器值為1,并且在方法釋放的作用域內沒有對應的release時,對象就不會被自動釋放池釋放,最后導致泄露內存。
釋放沒有所有權的對象。如果釋放的是沒有所有權的對象,會發生過度釋放的錯誤。
本文主要對影響ios內存的幾個重要方面進行了闡述,著重剖析了內存管理中難以理解以及容易混淆的部分,并歸納總結了ios開發中常見的內存管理的錯誤以及規則。最后達到了初步了解ios內存開發的管理機制的目的。
[1]李蕾,李曉麗.基于IOS手持終端的移動學習資源設計研究[J].中國電化教育,2014(12).
[2]盛平,嚴冬,張德勤.基于IOS平臺的智能視頻系統客戶端設計與實現[J].軟件導刊,2015(07).
[3]段艷艷,趙啟升.基于IOS的O2O商務平臺設計與實現[J].泰州職業技術學院學報,2014(03).
[4]孫曉文.IOS與Android操作系統的優缺點比較[J].無線互聯科技,2013(12).
TN929.5
A
1004-7344(2016)36-0269-01
2016-11-2