自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

10個(gè)加速Table Views開發(fā)的Tips

移動(dòng)開發(fā)
如果你曾經(jīng)跟collectionview打過交道,你可能已經(jīng)意識(shí)到了這篇文章的價(jià)值。如果你沒有注意速度這將會(huì)是一個(gè)大問題,你的用戶會(huì)讓你了解的。當(dāng)你的scrollview沒有你設(shè)備上的其他app的速度快的時(shí)候你將會(huì)很快意識(shí)到。Table views是每一個(gè)iOS初級(jí)開發(fā)者最先使用到的,也可能很快就陷入困惑。這篇文章將會(huì)深入講解一些也許你正在查找的問題。

[[142625]]

在我們開始之前,我準(zhǔn)備從今年開始多聽取一個(gè)意見。請(qǐng)花一些時(shí)間通過這篇簡(jiǎn)短的調(diào)查給我們一些反饋。這將會(huì)幫助我來幫助你。

如果你曾經(jīng)跟collectionview打過交道,你可能已經(jīng)意識(shí)到了這篇文章的價(jià)值。如果你沒有注意速度這將會(huì)是一個(gè)大問題,你的用戶會(huì)讓你了解的。當(dāng)你的scrollview沒有你設(shè)備上的其他app的速度快的時(shí)候你將會(huì)很快意識(shí)到。Table views是每一個(gè)iOS初級(jí)開發(fā)者***使用到的,也可能很快就陷入困惑。這篇文章將會(huì)深入講解一些也許你正在查找的問題。

龜兔問題 

Table views是一種交互對(duì)象,許多app利用它展示結(jié)構(gòu)化的數(shù)據(jù)。想要很好的利用它是很瑣細(xì)的,這使得他們使用起來猶如曲折的冒險(xiǎn)。設(shè)計(jì)者在設(shè)計(jì)之初不考慮性能的問題。設(shè)計(jì)者甚至可能是你自己。很快你將會(huì)做一個(gè)圖片類型的app,它需要在cell上展示許多信息。開始的時(shí)候可能很快但是很快就慢的像烏龜一樣。你想讓你的Table views順暢得像一片黃油。你的app的這些使用效果如果不好的話很快就會(huì)能夠注意到。

加速你的Table Views

我們會(huì)通過一個(gè)實(shí)際的例子來探索這些小提示,這個(gè)例子中的Table views實(shí)現(xiàn)得很不好。

通常你會(huì)發(fā)現(xiàn)一個(gè)圖片類的app會(huì)在一個(gè)imageview上做下面這些事情:

  • 下載圖片(主要的內(nèi)容圖片+用戶頭像圖片)
  • 更新時(shí)間戳
  • 展示評(píng)論
  • 計(jì)算動(dòng)態(tài)的cell的高度

在這個(gè)例子中我們打算集中分析以上幾點(diǎn)內(nèi)容。

我建議你去克隆下來那個(gè)demo的目錄(github)去體驗(yàn)一下一開始的時(shí)候它是多么糟糕。跳到XMCFeedTableViewCell看下它的提升并且感受一下它的性能。如果你在iphone 6+上面運(yùn)行的話優(yōu)化感受起來可能不那么好,意識(shí)到這點(diǎn)很重要。不要忘了在一臺(tái)更舊的設(shè)備上體驗(yàn)一下。

Tip#1 學(xué)習(xí)怎么提升速度

我可以寫一整篇關(guān)于Instruments的文章。在這兒我將給你一個(gè)大致的介紹因?yàn)檫@會(huì)很有幫助的。

如果你對(duì)于Instruments不是很有經(jīng)驗(yàn),我勸你周末花些時(shí)間來研究一些。當(dāng)你想要測(cè)量?jī)?nèi)存與時(shí)間消耗,他們會(huì)幫你很大的忙。然而當(dāng)你著手做一個(gè)app你將會(huì)在開發(fā)過程中遇到很多問題,代碼會(huì)變得越來越糟,這時(shí)你可能還無暇顧及性能的問題。但是重構(gòu)是潛在的。為了合適的重構(gòu)你應(yīng)該花費(fèi)精力在分析性能上面。

所以,下面是周末探索內(nèi)容:

1.打開你的項(xiàng)目并點(diǎn)擊Product>Profile

2.在那兒選擇Custom

3.找到添加按鈕并且添加工具:Allocations,Time,Profile,Leaks

4.觀察你的應(yīng)用,以及他的表現(xiàn)。

例如,我們關(guān)心的是速度(但是內(nèi)存也是一個(gè)大問題)。我們需要哪個(gè)工具呢?如果你選擇Time Profile那你就對(duì)了。讓我們打開它并觀察下運(yùn)行中的app。

301.jpg

下面你就能看到我們的app的概況。你所看到的就是我打開app并且盡我可能快的上下滾動(dòng)tableview。這就模擬出了一個(gè)很好的“最壞情況假設(shè)”,然后我們就可以采取行動(dòng)了。

302.jpg

這個(gè)區(qū)域就是我開始滾動(dòng)app時(shí)會(huì)執(zhí)行的代碼,我們只想知道在這個(gè)區(qū)域的時(shí)間消耗。

303.jpg

現(xiàn)在你可以開始研究我們上面討論的代碼了。雙擊這些行中的任何一行(***是最上面一行,那就是時(shí)間被消耗最多的地方)

需要指出很重要的一點(diǎn),那就是Call Tree下面的選項(xiàng)不是為你在Instruments加載時(shí)設(shè)置的。你需要自己去設(shè)置。

Tip#2 避免阻塞主線程

在這個(gè)例子中你會(huì)看到***個(gè)圖片相關(guān)的方法在數(shù)據(jù)下載并轉(zhuǎn)換成圖片對(duì)象時(shí)阻塞了主線程。你要盡量避免阻塞主線程,這對(duì)于collection中的交互對(duì)象尤為重要。網(wǎng)絡(luò)請(qǐng)求?保持他們?cè)诤笈_(tái)運(yùn)行(異步的)并且緩存?zhèn)骰氐捻憫?yīng)。你肯定不想重復(fù)處理任何操作。想象你的cell在一段沉默時(shí)間內(nèi)被繪制。你的cell應(yīng)該只展示已經(jīng)保存在你的設(shè)備上的數(shù)據(jù)。這會(huì)使你感覺更好的。

Tip#3 重用cells

如果你已經(jīng)花了一些時(shí)間學(xué)習(xí)iOS,那么不好意思 。這條建議是給那些新接觸iOS的同學(xué)的。你應(yīng)該使用dequeueReusableCellWithIdentifier 這個(gè)方法去獲取一個(gè)table或者collection上面的cell。如果你不是這樣做的,你就浪費(fèi)了一段無意義的時(shí)間和數(shù)據(jù)。

Tip#4 緩存下載的圖片

這肯定是你在這里讀到的最重要的一條建議了。如果你不緩存圖片你將會(huì)遇到很大的問題。

如果你重用本地的圖片那么請(qǐng)使用UIImage的方法imageNamed:。以JPG格式請(qǐng)求圖片將會(huì)節(jié)省時(shí)間和資源。如果你是從服務(wù)端獲取圖片那么你就可以獲取所需要的那些圖片( If you’re getting your image from a server you have the luxury of sending the exact image that’s needed.)。 PNG文件在內(nèi)存中會(huì)占用很大一部分空間。如果你對(duì)此感覺好奇你可以在示例中將JPG換成PNG來下載一系列的PNG圖片。

使用 SDWebImage 或者 Heneke 來管理圖片。在提供的示例中我就是用的 Heneke,在那之前我沒有聽說過它也沒有聽說過它的好用之處。

Tip#5 使用富文本標(biāo)簽代價(jià)是很昂貴的

費(fèi)盡周折用富文本標(biāo)簽,代價(jià)太昂貴了。盡可能地避免使用這個(gè)。問問你自己是否真的需要這個(gè)。如果是的話,盡可能的做緩存。

Tip#6 cell高度計(jì)算

如果你的table有復(fù)雜的動(dòng)態(tài)高度那么你需要緩存計(jì)算的高度??紤]多久計(jì)算一次(尤其是對(duì)于collection views來說),你希望這些高度都是直接可用的。

Tip#7 NsDateFormatter 的痛苦

就像富文本,如果你頻繁地初始化,date formatter可以引起大量的內(nèi)存消耗。比較理想的是你的web端為你提供可讀的文字(比起在***的時(shí)間計(jì)算要容易很多)。如果沒有的話你可以創(chuàng)建一個(gè)NSDateFormatter的單例來使用。NSDateFormatter不是線程安全的,但是iOS7以及之后就不再是這樣了多謝quellish提醒我這一點(diǎn)。

Tip#8 透明度

如果你能避免的話你創(chuàng)建的對(duì)象***是不透明的(非透明的,你不能透過它看過去)。如果你有透明的圖片,系統(tǒng)必要要很努力地重繪這些圖片。實(shí)際上你可以在模擬器中通過點(diǎn)擊Debug>Clolor Blended Areas來看這些區(qū)域的問題。

24.jpg

看到紅色的了么,那就意味著這些區(qū)域是透明的。當(dāng)你在跟一個(gè)Collectionview打交道時(shí)這將是非常耗時(shí)。理想的,你想看到整個(gè)屏幕都是綠色的。對(duì)于你的設(shè)計(jì)來說那可能是不可行的,但是力求減少你看到的紅色的數(shù)量。在示例中你可以看到label延伸到了view的尾部,可以被清除掉。

Tip#9 不要過多使用Xib(如果可以的話使用storyboard)

如果要使用xib就要小心一點(diǎn)。當(dāng)你加載一個(gè)Xib,整個(gè)的內(nèi)容會(huì)被加載到內(nèi)存中(圖片,隱藏的views)。但是這在storyboard中不會(huì)發(fā)生他只會(huì)實(shí)例化當(dāng)前要用的東西。

有一些特殊的場(chǎng)景下使用xib很有意義。比如你可能會(huì)要使用一些第三方的框架而他們采用純代碼的方式來寫collection的UI部分。如果你想用xib來創(chuàng)建一個(gè)原型cell你可以用xib來做。只是要小心不要過載。

Tip#10 使用CoreGraphics

我很少需要這個(gè),但是當(dāng)你需要的時(shí)候你可以用。使用CoreGraphics并在一個(gè)view的drawRect的方法中寫你的UI代碼。

挑戰(zhàn)

誰不喜歡一個(gè)好的挑戰(zhàn)?讓我們?cè)谶@兒來把它保持下來。這周花時(shí)間來做下面兩件事。

  • 學(xué)習(xí)怎么使用Instruments(time profiler, allocations)
  • 通過測(cè)試圖片緩存(關(guān)掉,打開,觀察)來檢查學(xué)習(xí)Instruments使用的情況。

https://github.com/mcgraw/dojo-table-performance

問題和回答

還沒有問題!請(qǐng)留下評(píng)論或者發(fā)送給david@xmcgraw.com。

Takeaway

在iOS中界面的交互很重要。這是不可妥協(xié)的。如果你不花時(shí)間在穩(wěn)固你的應(yīng)用在設(shè)備上的體驗(yàn),那么人們可能就會(huì)離你很遠(yuǎn)。當(dāng)我回顧應(yīng)用中的內(nèi)容時(shí)應(yīng)用應(yīng)該是順暢的。

輪到你了

對(duì)于提升性能你的首要建議是什么?我很樂意聽取你的建議。請(qǐng)您有空的時(shí)候在下面分享。

責(zé)任編輯:倪明
相關(guān)推薦

2015-07-30 09:49:33

Table ViewsTips加速

2011-09-05 09:53:36

CSS

2021-07-27 18:02:01

VueUse 函數(shù)開發(fā)

2016-08-03 16:27:47

GitLinux開源

2021-11-26 22:51:31

FlaskBlueprintsViews

2019-07-10 15:51:40

Python數(shù)據(jù)分析代碼

2020-08-21 08:52:09

Python數(shù)據(jù)分析工具

2016-05-04 09:45:01

CSS開發(fā)不要

2012-04-23 10:05:37

PHPWEB

2020-08-19 09:22:14

Python語言工具

2020-12-31 10:33:05

Python開發(fā)編程

2020-06-30 08:28:29

Vue開發(fā)前端

2013-05-17 16:14:49

iOS開發(fā)iOS應(yīng)用iPhone開發(fā)教程

2012-04-26 10:35:42

iPhone開發(fā)教程

2015-07-27 09:36:09

storyboard

2015-09-06 14:50:05

安卓app高效開發(fā)

2014-04-08 10:22:29

Android高效開發(fā)App

2020-05-09 09:31:15

前端開發(fā)Sublime Tex擴(kuò)展

2013-08-15 09:52:45

開發(fā)框架開發(fā)工具開發(fā)腳本

2021-06-14 09:54:46

框架開發(fā)應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)