有關(guān)項目的內(nèi)存優(yōu)化(1)

最近時間比較緊尾菇,所以有關(guān)項目中的優(yōu)化,特別是內(nèi)存優(yōu)化,一直沒來得及做好派诬,本來想找一個機會徹底處理好的劳淆,看能只能等下個階段處理好這種問題了。我們開發(fā)產(chǎn)品的時候默赂,會發(fā)現(xiàn)兼容性是一個比較大的問題沛鸵。產(chǎn)品不可能說僅僅兼容最新的設(shè)備,例如iphoneX或者安卓7.0缆八。事實上考慮到很多用戶的實際情況曲掰,很多用戶使用的還是2014年的ipad mini而不是ipad

air。


在此情況之下耀里,我也清楚某些比較old設(shè)備的情況了蜈缤,我們一起看一下各個蘋果設(shè)備的內(nèi)存限制情況:


設(shè)備??????????? ??????????內(nèi)存?????????????????????? 建議內(nèi)存

Ipad mini1??????????????? 512M??????????????????????? 170-180M

Ipad mini2??????????????? 1024M?????????????????????? 320-450M

Ipad1???????????????????? 256M??????????????????????? 40-80M

Ipad2???????????????????? 512M??????????????????????? 170-180M


這里并沒有貼上iphone1,iphone2,iphone3設(shè)備的內(nèi)存以及建議內(nèi)存,畢竟這些設(shè)備的使用量幾乎被后面的iphone6,iphone7,iphone8替代了冯挎,不過ipad mini系列的使用量還是比較大的底哥,即使是2014年,2015年的產(chǎn)品使用量還是有的房官。因為這個問題趾徽,所以項目必須做一次內(nèi)存優(yōu)化。


內(nèi)存優(yōu)化要做的要點有:


第一點:plist圖集文件的集中使用翰守。這里說明的意思是孵奶,圖集資源必須某一個僅僅支持某個UI,而不是說蜡峰,UI加載了該圖集了袁,但是該圖集存在其他的不需要用到的資源。例如a.json湿颅,a.csb,我們用到了a.plist中的50個文件载绿,但是事實上里面有100個小圖組成的大圖,這樣加載到內(nèi)存中的plist以及對應(yīng)的圖集文件油航,消耗了一倍的內(nèi)存崭庸,但是用到的卻不及一半,如此下去內(nèi)存急速增長谊囚,所以設(shè)備會撐不住怕享,直接黑屏。


第二點:緩存的使用镰踏,應(yīng)該謹(jǐn)慎函筋。這次要優(yōu)化的主要也是緩存。緩存使用得好奠伪,那是巧妙驻呐,使用得不好灌诅,內(nèi)存同樣會急劇飆升。我平時有注意到含末,有一些圖集資源是長期加載到內(nèi)存張的猜拾,并沒有釋放。但是即使是這么一點的內(nèi)存不釋放佣盒,引起的后果也是驚人的挎袜,由于其他的圖集渲染很厲害,最后整個消耗的內(nèi)存非常厲害肥惭,于是在比較老的設(shè)備上面出現(xiàn)問題盯仪,所以這也要是要優(yōu)化的方向。那么實際上我們到底應(yīng)不應(yīng)該使用緩存呢蜜葱。


就這一點全景,緩存的使用肯定是有價值的,例如切換紋理牵囤,例如精靈幀的緩存爸黄,又如動畫的緩存,我們使用到這些緩存技術(shù)揭鳞,主要是為了在一些復(fù)用的地方炕贵,又或者數(shù)組的地方,可以實現(xiàn)復(fù)用野崇。最現(xiàn)實的意義是称开,切換紋理,又或者精靈幀的復(fù)用乓梨,可以一次性直接從內(nèi)存中讀取精靈塊鳖轰,而不用一個一個的創(chuàng)建,速度快了很多扶镀,渲染也快了很多蕴侣。可以在一定程度上面降低GPU和CPU的內(nèi)存占用狈惫。當(dāng)然這些是建立在可靠的加載和釋放的情況下睛蛛,如果出現(xiàn)大時間段內(nèi)的不釋放鹦马,那么內(nèi)存出現(xiàn)問題胧谈,也是常見的,所以最后的方案是:按照場景進(jìn)行預(yù)加載需要的緩存荸频,需要的時候菱肖,就使用,不需要的時候旭从,就主動釋放稳强。具體的時機就是:OnEnter進(jìn)行加載场仲,OnExit進(jìn)行釋放掉,這樣就可以實現(xiàn)內(nèi)存的有效管理了退疫。目前項目中渠缕,存在的緩存是一次性加載到內(nèi)存中,考慮到高效性褒繁,所以并沒有按照場景進(jìn)行階段性的釋放和加載亦鳞,這是這次優(yōu)化必須做的。


第三點:要謹(jǐn)慎使用ImageView,精靈棒坏,按鈕燕差。我們知道使用渲染的消耗單位,精靈是1單位坝冕,ImageView是2單位徒探,按鈕則是3單位。不能因為渲染的差距不大喂窟,就可以頻繁使用按鈕或者ImageView,基本上內(nèi)存需求太多就是因為精靈测暗,ImageView以及按鈕的使用不當(dāng)造成的。這個時候谎替,我們可以考慮的方案是偷溺,如果必須要有觸摸效果,我們可以采用代碼實現(xiàn)按鈕的一些效果钱贯,而不是直接去使用按鈕挫掏。多一些渲染單位,對內(nèi)存的需求就增多了秩命,自然也就容易黑屏崩潰了尉共。


第四點:扁平節(jié)點設(shè)計。扁平的節(jié)點設(shè)計弃锐,這個比較重要袄友,我們最好不要建立太多的圖集或者文件的讀取目錄,相反應(yīng)該追求盡可能在一個地方讀取霹菊。雖然管理起來并不方案剧蚣,但是對于渲染而言,速度卻快了很多旋廷!另外一點鸠按,圖集的復(fù)用性,圖片的復(fù)用性饶碘。不要總是把某些類似的圖片或者圖集進(jìn)行重復(fù)的制造輪子目尖。不能因為類似的功能在兩處不同功能的地方,就使用兩次類似的文件扎运,這樣不對瑟曲,不僅加載了內(nèi)存的消耗饮戳,同時也加大了資源的消耗兰珍,造成了資源管理的不方便温治。要盡可能少的進(jìn)行文件讀取,次數(shù)越少越好肥照,減少CPU的文件讀寫操作消耗的內(nèi)存烦衣。在UI設(shè)計設(shè)計方面篮赢,盡可能扁平化,不要設(shè)計太深的節(jié)點琉挖。當(dāng)然這一點我們知道启泣,但是行動起來總是忘記了,其實很多時候還是因為為了追求自認(rèn)為合理的結(jié)構(gòu)示辈,所以就加深了層次結(jié)構(gòu)寥茫,這是要改善的地方。


以上四點是內(nèi)存優(yōu)化過程中的一部分矾麻。第四點則是多個內(nèi)存優(yōu)化的集合纱耻。后面會繼續(xù)講解內(nèi)存優(yōu)化,花較多的篇幅說明內(nèi)存優(yōu)化的過程和詳細(xì)細(xì)節(jié)险耀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弄喘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甩牺,更是在濱河造成了極大的恐慌蘑志,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贬派,死亡現(xiàn)場離奇詭異急但,居然都是意外死亡,警方通過查閱死者的電腦和手機搞乏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門波桩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人请敦,你說我怎么就攤上這事镐躲。” “怎么了侍筛?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵萤皂,是天一觀的道長。 經(jīng)常有香客問我勾笆,道長敌蚜,這世上最難降的妖魔是什么桥滨? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任窝爪,我火速辦了婚禮弛车,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒲每。我一直安慰自己纷跛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布邀杏。 她就那樣靜靜地躺著贫奠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪望蜡。 梳的紋絲不亂的頭發(fā)上唤崭,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音脖律,去河邊找鬼谢肾。 笑死,一個胖子當(dāng)著我的面吹牛小泉,可吹牛的內(nèi)容都是我干的芦疏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼微姊,長吁一口氣:“原來是場噩夢啊……” “哼酸茴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兢交,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薪捍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后配喳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飘诗,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年界逛,在試婚紗的時候發(fā)現(xiàn)自己被綠了昆稿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡息拜,死狀恐怖溉潭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情少欺,我是刑警寧澤喳瓣,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站赞别,受9級特大地震影響畏陕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仿滔,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一惠毁、第九天 我趴在偏房一處隱蔽的房頂上張望犹芹。 院中可真熱鬧,春花似錦鞠绰、人聲如沸腰埂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屿笼。三九已至,卻和暖如春翁巍,著一層夾襖步出監(jiān)牢的瞬間驴一,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工灶壶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛔趴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓例朱,卻偏偏與公主長得像孝情,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洒嗤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

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