一起來看看IOS記憶體流失的一個問題,一起來ios記憶體流失

來源:互聯網
上載者:User

一起來看看IOS記憶體流失的一個問題,一起來ios記憶體流失

很多iOS開發的朋友都是比較關心記憶體流失的問題,在實際的開發工作中首先我們需要知道程式有沒有記憶體泄露,然後定位到底是哪行代碼出現記憶體泄露了,這樣才能將其修複。最簡單的方法當然是藉助於專業的偵查工具,比較有名如BoundsCheck工具,功能非常強大。

  記憶體的泄漏是會關係到線上的穩定性和效能。記憶體泄露將會是導致這樣的情況發生:

  1.若是記憶體資源不足發生難以排查的線上bug

  2.被泄露對象的存在,將會是導致的一些業務bug,例如是泄露的對象它們是仍在接受全域的一個通知

  3.一些效能問題,是會導致使用者使用app時越來越卡

  記憶體泄露發現分成靜態掃描和運行時檢測,本文主要講運行時檢測。

  關於靜態掃描

  常用的一些靜態掃描的工具:

  xcode analyzer

  OCLint

  Infer

  運行時動態檢測

  因為在靜態掃描不能發現所有的記憶體泄露問題,因此在運動時檢測,是必不可少的一個操作。

  Allocation

  Xcode中的的Allocation是可以通過比較不同時間段的對象,用來是分析出是否發生了一些記憶體泄露。前提必須是每個頁面的命名要符合規範,就比如說寶貝詳情頁的所有對象,這些都是應用的首碼+寶貝詳情頁面首碼+具體對象名,當退出頁面的時候才會是知道相應的對象是否被釋放了,那是因為stack最底部的頁面的對象經常是駐在記憶體中。

  Allocation是通過和Monkey配合,當在迴歸測試的時候,會自動運行並通過計算記憶體佔用率,就可以判斷出新的開發版本是否發生了記憶體泄露,但是無法知道具體是哪個對象沒有釋放,局限性就是只能通過全域的一個判斷。

  重點是如何排查?

  當發現了記憶體泄露後,排查並解決,這才是最關鍵的一步。開發人員是根據泄露的對象,重點的去排查block和兩個以上對象循環參考的最終情況。

  發現是ViewController發生記憶體泄露,就要是重點的去查看一下ViewController裡面的block是否忘記聲明weak了,當ViewController被其他對象持有的情況不常見。因此若是用RAC的話,這就要去記得weakly和strongly要成對出現,否則將會是發生記憶體的泄露。

  實際上最常發生的是View的記憶體泄露問題,首先查看是發生記憶體泄露的view之間是否有delegate的關係,若有,則去看delegate屬性有沒有聲明weak,一般的由於service或者讀取緩衝等非同步作業引起的記憶體泄露問題。

  解決記憶體流失的問題最主要的還是在編碼的時候盡量的做到規範一些,學會利用工具去排查是積累經驗的有效手段,靜態掃描能解決一部分問題,動態掃描是最後的保證。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.