iOS內(nèi)存分析上-圖片加載內(nèi)存分析

iOS內(nèi)存分析上-圖片加載內(nèi)存分析

簡介

對于大多數(shù)App來說魁巩,內(nèi)存占用主要就是圖片。本文將從實用的角度分析于游,iOS圖片的內(nèi)存占用窖壕、測量忧勿、優(yōu)化等。

iOS內(nèi)存-有什么影響

在移動操作系統(tǒng)設(shè)備中瞻讽,是不能像PC一樣進行內(nèi)存swap的鸳吸,而隨著用戶的實用,打開的應(yīng)用越來越多速勇,應(yīng)用使用的內(nèi)存也越來越多晌砾。當占用的內(nèi)存達到某個臨界值時,iOS系統(tǒng)會嘗試按照優(yōu)先級逐個kill掉應(yīng)用程序烦磁,以維護系統(tǒng)的流暢和穩(wěn)定养匈。

當iOS系統(tǒng)在清理內(nèi)存過程中,優(yōu)先級到了前臺正在運行的應(yīng)用程序都伪,那么就會出現(xiàn)前臺應(yīng)用程序閃退的現(xiàn)象呕乎,也就是通常所說的OOM。

iOS內(nèi)存-關(guān)注什么

實際上陨晶,對于iOS系統(tǒng)內(nèi)存猬仁,根據(jù)劃分的方法方式,有很多內(nèi)存種類先誉,比較常見的有clean memory, dirty memory湿刽,有virtual memory, resident memory,等等褐耳。那么這么多的內(nèi)存诈闺,重點要關(guān)注什么呢?

For the purposes of this guide, Persistent Bytes for All Heap & Anonymous VM represents your app's memory footprint.

這句話來自蘋果的官方技術(shù)文檔铃芦,翻譯過來就是买雾,在內(nèi)存優(yōu)化中,需要關(guān)注的memory footprint就是“Persistent Bytes for All Heap & Anonymous VM”杨帽。也就是下圖中instruments-Allocation中的①漓穿。至于提到的memory footprint,可以參考wiki注盈。

image

也就是說晃危,iOS內(nèi)存優(yōu)化看“memory footprint”,“memory footprint”優(yōu)化看“Persistent Bytes for All Heap & Anonymous VM”

iOS內(nèi)存-圖片內(nèi)存怎么算

先打一個比喻,我們平時為了傳輸方便僚饭,往往會對文件進行壓縮震叮,得到一個.rar或者.zip的壓縮包,當我們要閱讀文件時鳍鸵,需要先解壓壓縮包苇瓣,得到.doc或者.txt等文檔,然后再打開閱讀偿乖。

類似的击罪,我們平時看到的.jpg,.png贪薪,就是上面所說的壓縮包媳禁,這個文件是不能直接上屏渲染的,需要先解壓縮画切,然后才能在上屏竣稽。而我們平時無感知,直接打開文件就能看霍弹,是因為解碼渲染很快毫别,在你點擊的時候就完成了解碼+渲染的操作了,類似.zip壓縮包也可以不解壓直接預覽一樣典格。

那么顯而易見岛宦,我們看到的磁盤上的圖片和最終渲染出來的圖片是不同的,那么圖片實際加載渲染時的內(nèi)存要怎么算呢钝计。在iOS中可以通過以下公式快速計算。其中4是每個像素占用的byte齐佳,在iOS中固定為4(至少目前為止是的)私恬,Android中需要根據(jù)實際的調(diào)整,一般也是4炼吴。

內(nèi)存大小=像素寬*像素高*4

iOS內(nèi)存-圖片內(nèi)存怎么取

如果要進行圖片內(nèi)存的優(yōu)化本鸣,首先得保證能監(jiān)測到圖片的內(nèi)存大小。圖片內(nèi)存的測量硅蹦,各家有各家的方案荣德,但是總的來說,都是在某個或多個圖片加載的入口童芹,進行侵入或非侵入AOP涮瞻,進行相關(guān)的計算。

這里推薦一個方法假褪,實用NSHashtable署咽,弱引用持有對象。將圖片的對象放到這個弱引用的hash表中,可以實時查看當前仍存活的所有圖片對象宁否,并據(jù)此計算圖片占用的內(nèi)存窒升。

iOS中UIImage內(nèi)存占用:

UIImage內(nèi)存占用大小:image.size.width*image.size.height*image.scale

iOS內(nèi)存-圖片內(nèi)存優(yōu)化

iOS圖片內(nèi)存優(yōu)化慕匠,大的方向就是:

少用饱须,勤釋放

就是在頁面中同時加載的圖片數(shù)量要少,單張圖片的大小要小台谊,圖片占用的內(nèi)存要勤釋放蓉媳,用CPU換內(nèi)存。

一個典型的優(yōu)化就是青伤,UITableView中督怜,cell的reuse。單個cell的高度推薦小于1屏狠角,cell要能夠重用号杠,列表滾動時,cell中的圖片按需加載和釋放丰歌。能夠做到這些姨蟋,一般的圖片內(nèi)存問題都能夠很好的解決。

iOS內(nèi)存-圖片按需加載

目前流行的圖片加載立帖,都會選取CDN眼溶,將原圖進行初步的壓縮,然后加載晓勇,但是這個更多的考慮的是服務(wù)的的性能堂飞,負載均衡等等,客戶端的收益基本就只有流量一條绑咱〈律福客戶端內(nèi)存的優(yōu)化微乎其微。

根據(jù)上面說的圖片內(nèi)存解釋描融,我們知道圖片內(nèi)存暴漲就是在對其解壓縮時铝噩。如果看過iOS最流行的圖片加載框架SDWebImage,和騰訊開源圖片框架LKImageKit窿克,可以發(fā)現(xiàn)LKImageKit有一個很精細的圖片加載優(yōu)化骏庸,就是在圖片解碼時,根據(jù)加載圖片的view的frame年叮,進行解碼具被。這樣就避免了一個很小的view,加載一張很大的圖片只损,消耗大量內(nèi)存的情況硬猫。

在SDWebImage中,要實現(xiàn)這個feature會有點麻煩。需要將上層調(diào)用的frame透傳到最下面的解碼部分啸蜜,且需要做一些錯誤校驗坑雅。

此外,需要注意的是衬横,壓縮率比較高的圖片裹粤,在進行這種二次壓縮時,壓縮后的圖片有可能會有很嚴重的失真蜂林。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遥诉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子噪叙,更是在濱河造成了極大的恐慌矮锈,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睁蕾,死亡現(xiàn)場離奇詭異苞笨,居然都是意外死亡,警方通過查閱死者的電腦和手機子眶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門瀑凝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人臭杰,你說我怎么就攤上這事粤咪。” “怎么了渴杆?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵寥枝,是天一觀的道長。 經(jīng)常有香客問我磁奖,道長囊拜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任点寥,我火速辦了婚禮艾疟,結(jié)果婚禮上来吩,老公的妹妹穿的比我還像新娘敢辩。我一直安慰自己,他們只是感情好弟疆,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布戚长。 她就那樣靜靜地躺著,像睡著了一般怠苔。 火紅的嫁衣襯著肌膚如雪同廉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音迫肖,去河邊找鬼锅劝。 笑死,一個胖子當著我的面吹牛蟆湖,可吹牛的內(nèi)容都是我干的故爵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼隅津,長吁一口氣:“原來是場噩夢啊……” “哼诬垂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伦仍,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤结窘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后充蓝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隧枫,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年棺克,在試婚紗的時候發(fā)現(xiàn)自己被綠了悠垛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娜谊,死狀恐怖确买,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纱皆,我是刑警寧澤湾趾,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站派草,受9級特大地震影響搀缠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜近迁,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一艺普、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鉴竭,春花似錦歧譬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至璧眠,卻和暖如春缩焦,著一層夾襖步出監(jiān)牢的瞬間读虏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工袁滥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盖桥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓题翻,卻偏偏與公主長得像葱轩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子藐握,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容