iOS性能優化 - 工具Instruments之Leaks內存泄漏

1、內存泄漏

  • 內存泄露指當一個對象或變量在使用完成後沒有釋放掉, 這個對象一直佔用着這部份內存, 直到應用中止。

2、內存泄漏的緣由分析

  • 在目前主要以ARC進行內存管理的開發模式,致使內存泄漏的根本緣由是代碼中存在循環引用,從而致使一些內存沒法釋放,這就會致使dealloc()方法沒法被調用。主要緣由大概有一下幾種類型:

(1)動畫效果產生的無限循環框架

(2)多個對象間的相互強引用工具

(3)定時器NSTimer的使用動畫

(4)代碼塊block的強引用代理

(5)代理delegate未使用正確的方法修飾指針

  • 解決方法:

(1)在視圖控制器即將消失時,移除動畫特效;cdn

(2)對象間採用弱引用;對象

(3)在視圖控制器即將消失時,中止定時特效;blog

(4)代碼塊中的使用弱引用;內存

(5)儘可能使用assign或者weak;開發

  • 要注意一點,並不是全部的block都須要使用weak來打破循環引用,若是self沒有持有block就不會形成循環引用。

3、查找泄漏點 (兩種工具)

  1. Analyze
  • 學 名: 靜態分析工具
  • 查 找: 能夠經過 Product ->Analyze 菜單項啓動
  • 快捷鍵: CMD+shift +b
  • Analyze主要分析如下四種問題:
    1. 邏輯錯誤:訪問空指針或未初始化的變量等;
    2. 內存管理錯誤:如內存泄漏等;
    3. 聲明錯誤:從未使用過的變量;
    4. Api調用錯誤:未包含使用的庫和框架。
  1. Instruments-Leaks
  • 學 名: 動態分析工具
  • 查 找: Product ->Profile 菜單項啓動
  • 快捷鍵: CMD + i
  • 簡 介:它有不少跟蹤模塊能夠動態分析和跟蹤內存, CPU 和文件系統。

4、Analyze使用方法

  • 在 Analyze 靜態分析結果中, 凡有圖標
    都是工具發現的疑似泄露點。
  • 注意:這裏使用Analyze查找出來的泄漏點,稱之爲「可疑泄漏點」。之因此稱之爲"可疑泄漏點",是由於這些點未必必定泄露,確認這些點是否泄露, 還要經過 Instruments 動態分析工具的 Leaks 和 Allocations 跟蹤模板. Analyze 靜態分析只是一個理論上的預測過程。

5、Leaks使用方法

  • 1.界面介紹

在 instruments 中,雖然選擇了 Leaks 模板,但默認狀況下也會添加 Allocations 模板.基本上凡是內存分析都會使用 Allocations 模板, 它能夠監控內存分佈狀況。

① 選中 Allocations 模板,(圖1區域),右邊的3區域會顯示隨着時間的變化內存使用的折線圖,同時在4區域會顯示內存使用的詳細信息,以及對象分配狀況。

② 點擊 Leaks 模板(圖中2區域), 能夠查看內存泄露狀況。若是在3區域有 紅X 出現, 則有內存泄露, 4區域則會顯示泄露的對象。

  • 2.使用Leaks進行監測

點擊泄露對象能夠在(下圖)看到它們的內存地址, 佔用字節, 所屬框架和響應方法等信息.打開擴展視圖, 能夠看到右邊的跟蹤堆棧信息

  • 3.監測結果分析:

相關文章
相關標籤/搜索