Memory Leak 又稱為記憶體洩漏,主要是在程式執行的階段某個被配置(Allocated)的記憶體無法在被參照(Referenced),也無法被釋放(Released)所導致的,它會造成記憶體的使用量隨著時間慢慢增加,直到系統在也無法負荷而 Crash,這個問題在記憶體使用量有限的手持裝置上顯得非常的重要,如何確保我們所撰寫的程式沒有 Memory Leak 的問題呢?可以從 Xcode 所提供的小工具來尋找解答。
在 Xcode 裡除了可以使用 ARC(Automatic Reference Counting)機制幫助我們自動做記憶體資源的管理外,也可以使用 Analyze (靜態)和 Build for Profiling(動態)等方法來檢測是否會產生 Memory Leak 的情況。
ps: ARC 機制在 iOS 5 SDK 中預設為啟用,如果不想使用 ARC 機制請參考在 Xcode 4 中關閉 ARC 的方法一文。
Analyze 靜態分析
你可以在專案 Build 的地方選擇 Analyze 來分析你的程式是否會產生 Memory Leak ,使用 Analyze 並不會真的去執行程式,而是在編譯完成之後進行自我檢測,降低可能產生 Memory Leak 的風險。
在 Build 中使用 Analyze 靜態分析做檢測 |
Analyze 的檢測結果 |
在上圖的檢測結果中,我們故意把物件 release 的部份做註解,而使其有機會產生 Memory Leak ,透過 Analyze 可以看到它明確的把該物件標示出來,並且分析可能的問題。
Build for Profiling 動態測試
在動態測試的部份則是實際上對應用程式做操作,並且由應用程式內部的各種狀態來分析可能造成 Memory Leak 的地方,對於一些較為複雜的應用程式來說,Build for Profiling 往往可以找出一些潛在的風險。
使用 Build for Profiling 方法時,Xcode 會自動呼叫 Instruments 工具程式,如果你的程式常常執行到一半當掉,也可以透過此方法來做進一步的測試。
在 Build 中使用 Build for Profiling 動態測試做檢測 |
選擇所要檢測的項目(Leaks) |
Build for Profiling 的檢測結果 |
在上圖的檢測結果得知,目標應用程式經我們修正之後,在執行操作上並沒有任何 Memory Leak 的現象產生。
ps: Instruments 工具程式是一個相當強大的應用程式檢視器,除了檢視 Memory Leak 的現象外,還有許多監測項目,像是 CPU、電池、圖形效能或是活動監視等等,你可以從 Xcode 的選單中單獨啟動它,並且設置相關的監測項目與 Target,即可使用。
從 Xcode 中單獨啟動 Instruments 工具程式 |
沒有留言:
張貼留言