iOS for循環出現的內存泄露

        最近在測試SDK的一些framework,發現一個非常奇怪的現象:使用他的demo調用一個方法,完全沒問題,但是使用我自己開發的框架調用同樣的方法,出現了內存不斷上漲的情況。我一度懷疑是不是我自己開發的框架哪裏出了問題,可是我嘗試了下調用其他的方法,結果是有的出現了內存上漲,有的並沒有出現內存上漲,鬱悶了好久!

        這是最開始調用方法的代碼:

        

        驀然回首,泄露就在不遠處!

        這個代碼細看並沒有什麼不對勁的地方,也很難找到會發生內存泄露的地方,但是也是寫代碼時最容易出現的code。在ARC模式下,所有的變量在每次的for循環之後都應該是釋放了的呀,到底是哪裏出現了內存上漲麼呢?直到有人提醒我,ARC是自動釋放內存,但只是在恰當的時候釋放掉內存!那難道是我們覺得應該釋放的時候,此時並不是這個"恰當"的時機,內存並沒有釋放麼?於是我試了下自動釋放池autoreleasepool,天啦嚕,內存不再上漲了!先上代碼:

        內存老實了很多嘛,後來在網上查到的是這個:該循環內產生大量的臨時對象,直至循環結束才釋放,可能導致內存泄漏,在循環中創建自己的autoReleasePool,能夠及時釋放佔用內存大的臨時變量,減少內存佔用峯值。

        年輕的我不明覺厲,還真是內存未釋放導致的。可是,爲啥我的認知是for循環之後內存就是放了呢?你有沒有也是這樣認爲的呢?年輕的我們還有很多坑要踩呀。有句話作爲結尾在合適不過了:你以爲的不一定就是你以爲的!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章