1.UITableViewCell重用機(jī)制?
UITableView只會(huì)創(chuàng)建一屏幕(或者一屏幕多一點(diǎn))的cell,其他都是取出來重用的。每當(dāng)cell滑出屏幕的時(shí)候隶债,就會(huì)放到一個(gè)集合中,當(dāng)要顯示某一位置的cell時(shí)跑筝,會(huì)先去集合中取死讹,有的話,就直接拿出來顯示曲梗,沒有在創(chuàng)建赞警。
2.tableView滑動(dòng)為什么會(huì)卡頓?
cell賦值內(nèi)容時(shí)虏两,會(huì)根據(jù)內(nèi)容設(shè)置布局愧旦,也就可以知道cell的高度,若有1000行定罢,就會(huì)調(diào)用1000次 cellForRow方法笤虫,而我們對(duì)cell的處理操作,都是在這個(gè)方法中賦值祖凫,布局等等琼蚯,開銷很大。
3.優(yōu)化方法惠况?
3.1優(yōu)化:heightForRow方法處理cell高度遭庶。
思路:賦值和計(jì)算布局分離。cellForRow負(fù)責(zé)賦值稠屠,heightRorRow負(fù)責(zé)計(jì)算高度峦睡。
3.2自定義cell繪制:
各個(gè)信息都是根據(jù)之前算好的布局進(jìn)行繪制的。需要異步繪制权埠。重寫draeRect方法就不需要異步繪制了榨了,因?yàn)閐rawRect本來就是異步繪制的。圖文混排的繪制弊知,coreText繪制阻逮。
3.3按需加載(UIScrollView方面):
如果目標(biāo)行與當(dāng)前行相差超過指定行數(shù),只在目標(biāo)滾動(dòng)范圍的前后制定n行加載秩彤。滾動(dòng)很快時(shí)叔扼,只加載目標(biāo)范圍內(nèi)得cell,這樣按需加載漫雷,極大地提高了流暢性瓜富。
4.總結(jié)
1.提前計(jì)算并緩存好高度,因?yàn)閔eightForRow最頻繁的調(diào)用降盹。
2.異步繪制与柑,遇到復(fù)雜界面,性能瓶頸時(shí),可能是突破口价捧。
3.滑動(dòng)時(shí)按需加載丑念,這個(gè)在大量圖片展示,網(wǎng)絡(luò)加載時(shí)结蟋,很管用脯倚。(SDWebImage已經(jīng)實(shí)現(xiàn)異步加載)。
4.重用cells嵌屎。
5.如果cell內(nèi)顯示得內(nèi)容來自web推正,使用異步加載,緩存結(jié)果請(qǐng)求宝惰。
6.少用或不用透明圖層植榕,使用不透明視圖。
7.盡量使所有的view opaque尼夺,包括cell本身尊残。
8.減少subViews
9.少用addView給cell動(dòng)態(tài)添加view,可以初始化的時(shí)候就添加淤堵,然后通過hide控制是否顯示夜郁。