en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

8.07.2013

使用 Xcode 檢測 Memory Leak 的方法


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 工具程式






沒有留言:

張貼留言