關(guān)于iOS性能優(yōu)化

iOS的性能優(yōu)化這一塊,應(yīng)該怎么答呢?很多時(shí)候,咱們的學(xué)員一說到iOS的性能優(yōu)化只會(huì)想到UITableViewCell的重用這點(diǎn)。也就只能說到這點(diǎn)。但這是很膚淺的一點(diǎn)。首先要理解性能這個(gè)詞,還有優(yōu)化這個(gè)詞。分開看。性能,那么就是越快越好。優(yōu)化,那就是你能多快就多快。假如面試官問你關(guān)于性能優(yōu)化這塊,我給的建議是:

第一個(gè)方面是:就是你所知道UITableViewCell的優(yōu)化,涉及到它的重用,以及cell的行高計(jì)算問題。雖然說很基礎(chǔ),但還是要答。盡可能的說得詳細(xì)一些。

第二個(gè)方面是:網(wǎng)絡(luò)請求方面的優(yōu)化,像我們利用第三方AFN的時(shí)候,可以做一層網(wǎng)絡(luò)隔離,減少對第三方的依賴性。還有就是涉及到網(wǎng)絡(luò)請求,在做UI功能設(shè)計(jì)的時(shí)候,一定要盡可能的減少同一時(shí)間多次網(wǎng)絡(luò)請求的可能性。在請求數(shù)據(jù)的時(shí)候,一定一定要用JSON,如果以后你們公司的后臺(tái)還用的是XML,那就代表你在網(wǎng)絡(luò)數(shù)據(jù)解析這塊會(huì)浪費(fèi)很多性能。JSON跟XML大家都學(xué)過。兩者都是常見的數(shù)據(jù)編碼方式。壓縮模式的效率在很大程度上取決于待壓縮數(shù)據(jù),而通常情況下,JSON都是一種最高效的模式。

第三個(gè)方面是:圖片加載的優(yōu)化。其實(shí)這也算另外一個(gè)問題,說的就是咱們很熟悉的SDWebImage框架的使用。有沒有做圖片的緩存,當(dāng)本地沒有圖片的時(shí)候怎么處理,有圖片的時(shí)候怎么處理。加載圖片的時(shí)候有沒有在異步加載啊。這些也是優(yōu)化,是不是我們自己做的,不是,但是你說的時(shí)候要有種指點(diǎn)江山的氣魄,是,他就是這樣,我就是會(huì)。

第四個(gè)方面是:在編碼過程中。能用懶加載的有沒有懶加載,能用單例的有沒有用單例,能封裝的有沒有封裝。再舉個(gè)例子,你看,我們很多app,都有很多控制器的基礎(chǔ)搭建都是很像的,那么這個(gè)時(shí)候你有沒有考慮使用一個(gè)baseController,在里面設(shè)置一些共有的屬性,然后后續(xù)的controller來繼承他。切圓角圖片的時(shí)候用的是什么技術(shù),有沒有做本地?cái)?shù)據(jù)的緩存等等。

以上說的幾點(diǎn)都是跟app的運(yùn)行速度有關(guān),這就是性能優(yōu)化。但是,你面試的時(shí)候答這些,對不對,行不行,可以不可以。我的答案是,對,行,可以。說這些都沒問題。但是,還可以更好。在坐的都是有三年經(jīng)驗(yàn)的iOS工程師,只看到這些,夠嗎,不夠。我們眼光要長遠(yuǎn)些,一個(gè)app的開發(fā)過程是短暫的。后面的是永無止境的維護(hù),更新,迭代。那么,在我們這些三年工作經(jīng)驗(yàn)的工程師面前,項(xiàng)目維護(hù)起來方便不方便,代碼閱讀起來直接不直接,這其中節(jié)省的時(shí)間還有你那為數(shù)不多的腦細(xì)胞,難道就是不優(yōu)化了嗎。這部分的優(yōu)化,優(yōu)化的是你的工作時(shí)間。那么,這部分優(yōu)化應(yīng)該體現(xiàn)在哪里,大家都知道的,只是沒想到可以這么答。我覺得有這么幾個(gè)方面可以節(jié)省我們后期維護(hù)代碼的時(shí)間。代碼編寫的規(guī)范,聲明在哪個(gè)地方,方法實(shí)現(xiàn)在哪個(gè)地方,懶加載在哪個(gè)地方,代理寫在哪里。這些地方都是固定的,就是為了方便查找節(jié)省時(shí)間。還有,有沒有嚴(yán)格遵守MVC或者M(jìn)VVM設(shè)計(jì)模式,打造輕量級(jí)的Contreller。給大家講一個(gè)小故事,就是我們的學(xué)員出去了,一直都在諷刺別人公司的代碼。要么沒有懶加載,要么就是一個(gè)Controller里面好幾千行代碼,在他們看來就是無恥,垃圾,敗類,呸。還有就是方法名字有沒有取好,屬性名有沒有取好。有些人覺得,方法名還要想好啊,這有什么影響嗎。有,很大的影響你閱讀代碼的速度。一個(gè)優(yōu)秀的方法名,你只要一看這個(gè)方法名字,你都不用看代碼了,你就大概知道這方法是用來干什么的了。屬性名也是一樣的。還有就是項(xiàng)目文檔要編寫的很清晰,這個(gè)類是干嘛的,這個(gè)功能實(shí)現(xiàn)的邏輯是什么。這些,就是優(yōu)化。當(dāng)然還有很多,結(jié)合你們自己的理解去講,至少比你只講什么UITableViewCell的優(yōu)化好吧。

再整理一下,從以下幾個(gè)方面1.性能優(yōu)化,包括內(nèi)存優(yōu)化,速度優(yōu)化,速度優(yōu)化主要是多線程和后臺(tái)加載。然后結(jié)合一個(gè)實(shí)例來回答,比如說tableView的性能優(yōu)化。重用是內(nèi)存優(yōu)化的一個(gè)體現(xiàn),異步繪制就是速度優(yōu)化的一個(gè)體現(xiàn)。2. 代碼優(yōu)化。包括嚴(yán)格遵循代碼規(guī)范,項(xiàng)目的文件和文件夾結(jié)構(gòu)按mvc或者mvvc的架構(gòu)來搭建,不要弄成一坨。具體的實(shí)現(xiàn)能抽成函數(shù),抽成函數(shù),能封裝成類的封成類,結(jié)合具體的項(xiàng)目的架構(gòu)來談。3.第三個(gè)不太重要的是程序的體積可以優(yōu)化。這樣下載速度較快,也對內(nèi)存的壓務(wù)會(huì)小一些。

補(bǔ)充下大神的iOS優(yōu)化性能文章:

iOS最全性能優(yōu)化(上) - 簡書

iOS最全性能優(yōu)化(中) - 簡書

iOS最全性能優(yōu)化(下) - 簡書

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

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

  • 性能優(yōu)化 80% 的性能優(yōu)化都是不必要的, 如果應(yīng)用存在明顯問題. 再逐一核對. 1. 內(nèi)存的優(yōu)化: 重用和懶加載...
    ValienZh閱讀 2,813評論 3 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,153評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,422評論 4 61
  • 我的心吶, 你為什么如此頑固不靈? 受到的鞭打, 還嫌少嗎? 受到的責(zé)備, 都忘記了嗎? 我到底要怎樣做? 才能使...
    海王星1984閱讀 444評論 0 1
  • 原創(chuàng) 遠(yuǎn)方的你是否在思念 有時(shí)遇見喜歡的人卻不能在一起 有些話 也說不出來,卻只能濫在肚子里 慢慢地 靜靜地 安好...
    南方的風(fēng)景閱讀 289評論 5 5

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