性能優(yōu)化

instrument 分析:

參考文檔:

1.http://www.reibang.com/p/9e1f0b44935c

2.http://www.open-open.com/lib/view/open1421115558515.html

使用文檔:

http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf

關(guān)于性能優(yōu)化的25個(gè)建議和技巧:

http://blog.jobbole.com/37984/

性能優(yōu)化:

啟動(dòng)時(shí)間、用戶(hù)響應(yīng)(UI反饋?lái)憫?yīng)及時(shí))耘分、列表滾動(dòng)操作流暢蚊丐、圖形動(dòng)畫(huà)、內(nèi)存使用合理、不會(huì)隨便crash。


1.NSDateFormatter?

創(chuàng)建耗時(shí)33ms ,NSDateFormatter 設(shè)置3個(gè)屬性平均耗時(shí)也在30ms左右汞贸,NSCalendar與之類(lèi)似。

解決方案:盡量避免采用處理多個(gè)日期格式,當(dāng)然針對(duì)日期格式處理如果需要提高更多的速度著蛙,可以直接采用C,可以菜用https://blog.soff.es/how-to-drastically-improve-your-app-with-an-afternoon-and-instruments來(lái)規(guī)避這個(gè)問(wèn)題耳贬。

2.UIImage緩存取舍

imagedNamed 初始化:默認(rèn)加載圖片成功后會(huì)在內(nèi)存中緩存圖片踏堡,這個(gè)方法用一個(gè)指定的名字在系統(tǒng)緩存中查找并返回一個(gè)圖片對(duì)象。如果緩存中沒(méi)有找到形影的圖片對(duì)象咒劲,則從指定地方加載圖片然后緩存對(duì)象顷蟆,并返回這個(gè)圖片對(duì)象。

imagedWithContentsOfFile初始化:僅加載圖片腐魂,不緩存帐偎。

解決方案:

大量使用imageNamed方式會(huì)在不需要緩存的地方額外增加開(kāi)銷(xiāo)CPU的時(shí)間來(lái)哦做這件事,當(dāng)應(yīng)用程序需要加載一張比較大的圖片并且使用一次性蛔屹,那么其實(shí)是沒(méi)有必要去緩存這個(gè)圖片的削樊,用imageWithContentsOfFile是最為經(jīng)濟(jì)的方式,這樣不會(huì)因?yàn)閁IImage元素較多情況下兔毒,CPU會(huì)被逐個(gè)分散在不必要緩存上浪費(fèi)過(guò)多時(shí)間漫贞。

3.對(duì)于不一定展示的而且費(fèi)時(shí)UI盡量采用多線(xiàn)程,將必須展示的UI放在主線(xiàn)程中育叁,而不一定展示的UI放在子線(xiàn)程中

另外針對(duì)單個(gè)view 盡量不要在viewWillAppear費(fèi)時(shí)的操作迅脐,viewWillAppear在 view 顯示之前被調(diào)用,出于效率考慮豪嗽,在這個(gè)方法中不要處理復(fù)雜費(fèi)時(shí)的事情谴蔑;只應(yīng)該在這個(gè)方法設(shè)置 view 的顯示屬性之類(lèi)的簡(jiǎn)單事情黔攒,比如背景色甜熔,字體等话肖。不然宙地,用戶(hù)會(huì)明顯感覺(jué)到 view 顯示遲鈍崖疤。

4.避免首次加載耗時(shí)

應(yīng)用程序首次加載中啟動(dòng)方法willFinishLaunchingWithOptions和didFinishLaunchingWithOptions只做應(yīng)用程序首次啟動(dòng)必須的要操作,而針對(duì)_dyid_start在初始化庫(kù)framework函數(shù)的操作.不必要的Framework不要鏈接序臂,避免首次加載耗時(shí)桐智。

5.盡量把views設(shè)置為不透明

如果你有不透明的Views意荤,你應(yīng)該設(shè)置它們的opaque屬性為YES蹦玫。原因是這會(huì)使系統(tǒng)用一個(gè)最優(yōu)的方式渲染這些views赎婚。

(opaque)這個(gè)屬性給渲染系統(tǒng)提供了一個(gè)如何處理這個(gè)view的提示。如果設(shè)為YES樱溉, 渲染系統(tǒng)就認(rèn)為這個(gè)view是完全不透明的挣输,這使得渲染系統(tǒng)優(yōu)化一些渲染過(guò)程和提高性能。如果設(shè)置為NO福贞,渲染系統(tǒng)正常地和其它內(nèi)容組成這個(gè)View撩嚼。

在模擬器中用Debug\Color Blended Layers選項(xiàng)來(lái)發(fā)現(xiàn)哪些view沒(méi)有被設(shè)置為opaque。目標(biāo)就是,能設(shè)為opaque的就全設(shè)為opaque!

6.避免過(guò)于龐大的XIB

iOS5中加入的Storyboards(分鏡)正在快速取代XIB完丽。然而XIB在一些場(chǎng)景中仍然很有用恋技。比如你的app需要適應(yīng)iOS5之前的設(shè)備,或者你有一個(gè)自定義的可重用的view,你就不可避免地要用到他們逻族。

如果你不得不XIB的話(huà)蜻底,使他們盡量簡(jiǎn)單。嘗試為每個(gè)Controller配置一個(gè)單獨(dú)的XIB聘鳞,盡可能把一個(gè)View Controller的view層次結(jié)構(gòu)分散到單獨(dú)的XIB中去薄辅。

需要注意的是,當(dāng)你加載一個(gè)XIB的時(shí)候所有內(nèi)容都被放在了內(nèi)存里抠璃,包括任何圖片站楚。如果有一個(gè)不會(huì)即刻用到的view,你這就是在浪費(fèi)寶貴的內(nèi)存資源了搏嗡。Storyboards就是另一碼事兒了窿春,storyboard僅在需要時(shí)實(shí)例化一個(gè)view controller。

7.不要阻塞主線(xiàn)程

永遠(yuǎn)不要使主線(xiàn)程承擔(dān)過(guò)多采盒。因?yàn)閁IKit在主線(xiàn)程上做所有工作谁尸,渲染,管理觸摸反應(yīng)纽甘,回應(yīng)輸入等都需要在它上面完成良蛮。一直使用主線(xiàn)程的風(fēng)險(xiǎn)就是如果你的代碼真的block了主線(xiàn)程,你的app會(huì)失去反應(yīng)悍赢。

大部分阻礙主進(jìn)程的情形是你的app在做一些牽涉到讀寫(xiě)外部資源的I/O操作决瞳,比如存儲(chǔ)或者網(wǎng)絡(luò)。

你可以使用NSURLConnection異步地做網(wǎng)絡(luò)操作:

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler或者使用像AFNetworking這樣的框架來(lái)異步地做這些操作左权。

如果你需要做其它類(lèi)型的需要耗費(fèi)巨大資源的操作(比如時(shí)間敏感的計(jì)算或者存儲(chǔ)讀寫(xiě))那就用 Grand Central Dispatch皮胡,或者 NSOperation 和 NSOperationQueues。

8.在Image Views中調(diào)整圖片大小

如果要在UIImageView中顯示一個(gè)來(lái)自bundle的圖片赏迟,你應(yīng)保證圖片的大小和UIImageView的大小相同屡贺。在運(yùn)行中縮放圖片是很耗費(fèi)資源的,特別是UIImageView嵌套在UIScrollView中的情況下锌杀。

如果圖片是從遠(yuǎn)端服務(wù)加載的你不能控制圖片大小甩栈,比如在下載前調(diào)整到合適大小的話(huà),你可以在下載完成后糕再,最好是用background thread量没,縮放一次,然后在UIImageView中使用縮放后的圖片突想。

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg:

在后臺(tái)執(zhí)行一個(gè)操作殴蹄,本質(zhì)就是重新創(chuàng)建一個(gè)線(xiàn)程執(zhí)行當(dāng)前方法究抓。

9.選擇正確的Collection!袭灯?

學(xué)會(huì)選擇對(duì)業(yè)務(wù)場(chǎng)景最合適的類(lèi)活著對(duì)象是寫(xiě)出能效高的代碼的基礎(chǔ)刺下。

一些常見(jiàn)Collection的總結(jié):

Arrays: 有序的一組值。使用index來(lái)lookup很快稽荧,使用value lookup很慢怠李, 插入/刪除很慢。

Dictionaries: 存儲(chǔ)鍵值對(duì)蛤克。 用鍵來(lái)查找比較快。

Sets: 無(wú)序的一組值夷蚊。用值來(lái)查找很快构挤,插入/刪除很快。

10.打開(kāi)gzip壓縮惕鼓?筋现?

iOS已經(jīng)在NSURLConnection中默認(rèn)支持了gzip壓縮,當(dāng)然AFNetworking這些基于它的框架亦然箱歧。像Google App Engine這些云服務(wù)提供者也已經(jīng)支持了壓縮輸出矾飞。

11.優(yōu)化TableView

為了保證table view平滑滾動(dòng),確保你采取了以下的措施:

正確使用reuseIdentifier來(lái)重用cells

盡量使所有的view opaque呀邢,包括cell自身

避免漸變洒沦,圖片縮放,后臺(tái)選入

緩存行高

如果cell內(nèi)顯示的內(nèi)容來(lái)自web价淌,使用異步加載申眼,緩存請(qǐng)求結(jié)果

使用shadowPath來(lái)畫(huà)陰影

減少subviews的數(shù)量

盡量不使用cellForRowAtIndexPath:,如果你需要用到它蝉衣,只用一次然后緩存結(jié)果

使用正確的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù)

使用rowHeight,sectionFooterHeight和sectionHeaderHeight來(lái)設(shè)定固定的高括尸,不要請(qǐng)求delegate

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市病毡,隨后出現(xiàn)的幾起案子濒翻,更是在濱河造成了極大的恐慌,老刑警劉巖啦膜,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件有送,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡僧家,警方通過(guò)查閱死者的電腦和手機(jī)娶眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)啸臀,“玉大人届宠,你說(shuō)我怎么就攤上這事烁落。” “怎么了豌注?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵伤塌,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我轧铁,道長(zhǎng)每聪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任齿风,我火速辦了婚禮药薯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘救斑。我一直安慰自己童本,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布脸候。 她就那樣靜靜地躺著穷娱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪运沦。 梳的紋絲不亂的頭發(fā)上泵额,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音携添,去河邊找鬼嫁盲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛烈掠,可吹牛的內(nèi)容都是我干的亡资。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼向叉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼锥腻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起母谎,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瘦黑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后奇唤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體幸斥,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年咬扇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甲葬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡懈贺,死狀恐怖经窖,靈堂內(nèi)的尸體忽然破棺而出坡垫,到底是詐尸還是另有隱情,我是刑警寧澤画侣,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布冰悠,位于F島的核電站,受9級(jí)特大地震影響配乱,放射性物質(zhì)發(fā)生泄漏溉卓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一搬泥、第九天 我趴在偏房一處隱蔽的房頂上張望桑寨。 院中可真熱鬧,春花似錦忿檩、人聲如沸尉尾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扰她,卻和暖如春兽掰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徒役。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工孽尽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忧勿。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓杉女,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鸳吸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熏挎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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