iOS優(yōu)化內(nèi)存優(yōu)化經(jīng)驗

最近一直在做公司app內(nèi)存優(yōu)化相關(guān)事宜,排查別人的代碼,也能給自己一些警示。現(xiàn)在整理出一些內(nèi)存管理出的問題,希望能幫助到大家。

問題1:多個頁面無法成功dealloc,內(nèi)存沒有被釋放

解決步驟:在viewDidDisAppear中,發(fā)現(xiàn)retainCount為6,證明此時這個ViewController還存在引用計數(shù),查了各種self的引用之后,萬萬沒想到,十幾個地方都這樣:

1.png

還記得我寫的這篇文章么:記今天調(diào)試了一條迷の閃退問題。一開始我以為是delegate的問題,但是萬萬沒想到...

當時自己一個不注意坑了自己,這回被同事坑了。這邊代碼是個不主做iOS方向的同事寫的,OC的默認類型是atomic , strong , readwrite,然而他并不知道。

問題原因:內(nèi)存不被釋放主要是self被delegate強引用了。由此還造成了一部分閃退問題,因為大部分通知的注銷都寫在dealloc中,所以通知無法注銷,導致各種調(diào)用滿天飛,畫面太美不敢看。

問題2:某頁面成功dealloc,但是仍有內(nèi)存殘留

解決步驟:instrument調(diào)試后,發(fā)現(xiàn)沒被釋放的全是imageIO,差不多就知道了,把讀圖的方式,從[UIImage imageNamed:@""],改成imageWithContentsOfFile,就可以了。

2.png

問題原因:imageNamed讀取圖片的方法,會緩存在內(nèi)存中,所以較大的圖片,還是用imageWithContentsOfFile。

TIPs1:.xcassets里的圖片無法用imageWithContentsOfFile讀取;

TIPs2:imageWithContentsOfFile讀取圖片需要加文件后綴名如png,jpg等;

問題3:圖片讀取總是出現(xiàn)迷之內(nèi)存殘留

解決步驟:

這個問題找了我很久,發(fā)現(xiàn)每次讀緩存(memory)的時候都不會有內(nèi)存增加,而從磁盤(disk)讀取的時候,就會有問題。然后我就一步一步排查。最后在block里發(fā)現(xiàn)了這個:

3.png

寫這段代碼的出來我們聊聊人生。

"( *?ω?)?╰ひ╯

問題原因:block里沒有使用弱引用,導致一直持有self得不到釋放。

TIPs:block引用self要慎重,如果self釋放后仍有業(yè)務邏輯要在block中運行,可以再對weakSelf強引用一下。

問題4:使用GPUImage處理拍照的時候,內(nèi)存穩(wěn)定不明增長。

問題原因:

喵神之前在博客發(fā)的一個問題

是Xcode7.1的問題。。只在debug的時候?qū)е聝?nèi)存崩潰,release的時候并不會造成內(nèi)存溢出,所以可以不必管它。

原文鏈接:http://www.itdecent.cn/p/ef52250df748

著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標注“簡書作者”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 把網(wǎng)上的一些結(jié)合自己面試時遇到的面試題總結(jié)了一下,以后有新的還會再加進來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,667評論 0 20
  • 簡述: 本應釋放的內(nèi)存沒有釋放,導致可用空間減少的現(xiàn)象。舉個例子:你dismiss了一個視圖控制器,但是最終卻沒有...
    iOS_肖晨閱讀 2,843評論 2 62
  • 學習Android的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Android學習交流...
    kingZXY2009閱讀 412評論 0 0
  • 一. 如何讓你的應用程序更加省電?答:(1). 如果程序用到定位,需要在定位完畢之后關(guān)閉定位,或者降低定位的頻率,...
    Hevin_Chen閱讀 1,256評論 0 4
  • 1.android:gravity屬性是對該view中內(nèi)容的限定.比如一個button 上面的text. 你可以設...
    Mandy_jin閱讀 443評論 0 0

友情鏈接更多精彩內(nèi)容