TableView為什么會卡凫佛?

TableView為什么會卡溉躲?

主要由以下原因:

cellForRowAtIndexPath:方法中處理了過多業(yè)務(wù)

tablev

iewCell的subview層級太復(fù)雜胚宦,做了大量透明處理

cell的height動態(tài)變化時計算方式不對

優(yōu)化核心思想:UITableViewCell重用機(jī)制

簡單的理解就是:UITableView只會創(chuàng)建一屏幕(或一屏幕多一點(diǎn))的UITableViewCell,其他都是從中取出來重用的戒洼。每當(dāng)Cell滑出屏幕時俏橘,就會放入到一個集合(或數(shù)組)中(這里就相當(dāng)于一個重用池),當(dāng)要顯示某一位置的Cell時圈浇,會先去集合(或數(shù)組)中取寥掐,如果有,就直接拿來顯示磷蜀;如果沒有召耘,才會創(chuàng)建。這樣做的好處可想而知褐隆,極大的減少了內(nèi)存的開銷污它。

Tips:

提前計算并緩存好高度(布局),因為heightForRowAtIndexPath:是調(diào)用最頻繁的方法庶弃;

異步繪制,遇到復(fù)雜界面,參考Facebook的AsyncDisplayKit和YYAsyncLayer異步繪制框架衫贬;

緩存圖片(SDWebImage),提前處理好UIImageView圖片的尺寸按需加載而不是加載原圖歇攻;

計算等耗時操作異步處理固惯,處理完再回主線程更新UI;

圖文混排不定高度采用CoreText排版缴守,緩存Cell高度參考YYKit缝呕;

實現(xiàn)Cell的drawRect:方法直接繪制,減少UIView斧散,UIImageView,UILabel等容器的使用摊聋。

Bonus:

正確使用reuseIdentifier來重用Cell鸡捐;

盡量少用或不用透明圖層或View;

如果Cell內(nèi)現(xiàn)實的內(nèi)容來自web麻裁,使用異步加載箍镜,緩存請求結(jié)果;

減少subviews的數(shù)量在heightForRowAtIndexPath:中盡量不使用cellForRowAtIndexPath:煎源,如果你需要用到它色迂,只用一次然后緩存結(jié)果;

盡量少用addView給Cell動態(tài)添加View手销,可以初始化時就添加歇僧,然后通過hide來控制是否顯示;

固定高度不要實現(xiàn)heightForRowAtIndexPath:方法。

1.UITableViewCell里不要添加太多subview诈悍,最好只添加一個cellview祸轮。

2.UITableViewCell 上的子View的opaque屬性設(shè)為YES。其實默認(rèn)也是不透明侥钳。UITableViewCell盡量不要包含透明的子View适袜。

3.在cellview里,重寫drawRect函數(shù)繪制UITableViewCell的內(nèi)容舷夺。

4.在繪制字符串時苦酱,盡可能使用drawAtPoint: withFont:,而不要使用更復(fù)雜的drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode; 如果要繪制過長的字符串给猾,建議自己先截斷疫萤,然后使用drawAtPoint: withFont:方法繪制。

5.在繪制圖片時耙册,盡量使用drawAtPoint给僵,而不要使用drawInRect。drawInRect如果在繪制過程中對圖片進(jìn)行放縮详拙,會特別消耗CPU帝际。

6.如果繪制cell過程中,需要下載cell中的圖片饶辙,建議在繪制cell一段時間后再開啟圖片下載任務(wù)蹲诀。譬如先畫一個默認(rèn)圖片,然后在0.5S后開始下載本cell的圖片弃揽。

7.即使下載cell 圖片是在子線程中進(jìn)行脯爪,在繪制cell過程中,也不能開啟過多的子線程矿微。最好只有一個下載圖片的子線程在活動痕慢。否則也會影響UITableViewCell的繪制,因而影響了UITableViewCell的滑動速度涌矢。(建議結(jié)合使用NSOpeartion和NSOperationQueue來下載圖片掖举,如果想盡可能找的下載圖片,可以把[self.queuesetMaxConcurrentOperationCount:4];)

8.最好自己寫一個cache娜庇,用來緩存UITableView中的UITableViewCell塔次,這樣在整個UITableView的生命周期里,一個cell只需繪制一次名秀,并且如果發(fā)生內(nèi)存不足励负,也可以有效的釋放掉緩存的cell。

9.不要將tableview的背景顏色設(shè)置成一個圖片匕得。這回嚴(yán)重影響UITableView的滑動速度继榆。在限時免費(fèi)搜索里,我曾經(jīng)翻過一個錯誤:self.tableView_.backgroundColor = [UIColorcolorWithPatternImage:[UIImageimageNamed:@"background.png"]]; 通過這種方式設(shè)置UITableView的背景顏色會嚴(yán)重影響UTIableView的滑動流暢性。修改成`self.tableView_.backgroundColor` = [UIColor clearColor];之后裕照,fps從43上升到60左右攒发。滑動比較流暢晋南。

10.cell的行高不是固定值惠猿,需要計算,則要盡可能緩存行高值负间,避免重復(fù)計算行高偶妖。這里指的是UITableViewDelegate里的行高函數(shù)。

如果做到以上10點(diǎn)政溃,則UITableView 滑動的fps可以達(dá)到60 fps趾访。滑動非常順暢

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末董虱,一起剝皮案震驚了整個濱河市扼鞋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愤诱,老刑警劉巖云头,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淫半,居然都是意外死亡溃槐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門科吭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昏滴,“玉大人,你說我怎么就攤上這事对人∫ナ猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵牺弄,是天一觀的道長姻几。 經(jīng)常有香客問我,道長猖闪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任肌厨,我火速辦了婚禮培慌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柑爸。我一直安慰自己吵护,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馅而,像睡著了一般祥诽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓮恭,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天雄坪,我揣著相機(jī)與錄音,去河邊找鬼屯蹦。 笑死维哈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的登澜。 我是一名探鬼主播阔挠,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脑蠕!你這毒婦竟也來了购撼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谴仙,失蹤者是張志新(化名)和其女友劉穎迂求,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狞甚,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锁摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哼审。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谐腰。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涩盾,靈堂內(nèi)的尸體忽然破棺而出十气,到底是詐尸還是另有隱情,我是刑警寧澤春霍,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布砸西,位于F島的核電站,受9級特大地震影響址儒,放射性物質(zhì)發(fā)生泄漏芹枷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一莲趣、第九天 我趴在偏房一處隱蔽的房頂上張望鸳慈。 院中可真熱鬧,春花似錦喧伞、人聲如沸走芋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翁逞。三九已至肋杖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挖函,已是汗流浹背状植。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挪圾,地道東北人浅萧。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像哲思,于是被迫代替她去往敵國和親洼畅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,101評論 1 32
  • 1棚赔、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,981評論 3 119
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,386評論 8 265
  • 這是最近播出的韓劇名字帝簇,講述的是一個奇幻的漫畫故事。這部韓劇題材很新穎靠益,很大膽丧肴,既不顯得老套,也不唐突胧后,真的很建議...
    雪初穗子閱讀 579評論 0 0
  • 兩種表達(dá)方式?jīng)]有絕對的對或錯芋浮,則反證法就是用來證明對錯的
    淄川DDM趙鑫閱讀 242評論 0 0