TableView重用原理及一些注意點(diǎn)

什么是cell的重用?#

重用機(jī)制算行,簡單的說意思是一行一行cell的復(fù)用

為什么要實(shí)現(xiàn)重用呈驶?#

為了做到顯示和數(shù)據(jù)分離, 通過重用單元格來達(dá)到節(jié)省內(nèi)存的目的(一個(gè)屏幕顯示的cell數(shù)量是有限的碘梢,當(dāng)屏幕滾動(dòng)時(shí)候咬摇,就會(huì)調(diào)用方法獲取新出現(xiàn)的cell,而有的cell會(huì)滾動(dòng)到屏幕外面)煞躬。

如何實(shí)現(xiàn) cell的重用肛鹏?#

通過 UITableView的“dequeueReusableCellWithIdentifier”函數(shù)來實(shí)現(xiàn),從字面上理解是“出列的可重用的cell”恩沛,其實(shí)簡單說就是一個(gè)cell池在扰,里面放的就是你之前創(chuàng)建過的cell。

重用機(jī)制的實(shí)現(xiàn)原理复唤?#

UITableView頭文件健田,有visibleCells和reusableTableCells,visibleCells內(nèi)保存當(dāng)前顯示的cells佛纫,reusableTableCells保存可重用的cells妓局。
TableView顯示之初,reusableTableCells為空呈宇,
那么tableView dequeueReusableCellWithIdentifier: 返回nil好爬。
開始的cell都是通過[[UITableViewCell alloc] initWithStyle: reuseIdentifier: ]來創(chuàng)建,而且cellForRowAtIndexPath只是調(diào)用最大顯示cell數(shù)的次數(shù)甥啄。

注意點(diǎn):#

  1. 重取出來的cell是有可能已經(jīng)捆綁過數(shù)據(jù)或者加過子視圖的存炮,如果有必要,要清除需要用與顯示的數(shù)據(jù)和remove掉add過的子視圖。

  2. 原理就是為了避免頻繁的alloc和delloc cell對(duì)象穆桂。

  3. 設(shè)計(jì)的關(guān)鍵是實(shí)現(xiàn)cell和數(shù)據(jù)的完全分離宫盔。

解決辦法:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
//改為以下的方法  
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

所以整個(gè)過程并不難理解,但需要注意正是因?yàn)檫@樣的原因:配置cell的時(shí)候一定要注意享完,對(duì)取出的重用的cell做重新賦值灼芭,不要遺留老數(shù)據(jù)。


使用過程中般又,我注意到彼绷,并不是只有拖動(dòng)超出屏幕的時(shí)候才會(huì)更新reusableTableCells表,還有:

  1. reloadData茴迁,這種情況比較特殊寄悯。一般是部分?jǐn)?shù)據(jù)發(fā)生變化,需要重新刷新cell顯示的內(nèi)容時(shí)調(diào)用堕义。在cellForRowAtIndexPath調(diào)用中猜旬,所有cell都是重用的。
    reloadData調(diào)用后胳螟,把visibleCells(當(dāng)前顯示cell)中所有cell移入到reusableTableCells中昔馋,然后把visibleCells清空。
    cellForRowAtIndexPath調(diào)用后糖耸,再把重用的cell從reusableTableCells取出來秘遏,放入到visibleCells。

  2. reloadRowsAtIndex嘉竟,刷新指定的IndexPath邦危。如果調(diào)用時(shí)reusableTableCells為空,那么cellForRowAtIndexPath調(diào)用后舍扰,是新創(chuàng)建cell倦蚪,新的cell加入到visibleCells。老的cell移出visibleCells边苹,加入到reusableTableCells陵且。于是,之后的刷新就有cell做重用了个束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慕购,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子茬底,更是在濱河造成了極大的恐慌沪悲,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阱表,死亡現(xiàn)場離奇詭異殿如,居然都是意外死亡贡珊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門涉馁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來门岔,“玉大人,你說我怎么就攤上這事谨胞」掏幔” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵胯努,是天一觀的道長。 經(jīng)常有香客問我逢防,道長叶沛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任忘朝,我火速辦了婚禮灰署,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘局嘁。我一直安慰自己溉箕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布悦昵。 她就那樣靜靜地躺著肴茄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪但指。 梳的紋絲不亂的頭發(fā)上寡痰,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音棋凳,去河邊找鬼拦坠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剩岳,可吹牛的內(nèi)容都是我干的贞滨。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼拍棕,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼晓铆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起莫湘,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤尤蒿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后幅垮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腰池,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了示弓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讳侨。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奏属,靈堂內(nèi)的尸體忽然破棺而出跨跨,到底是詐尸還是另有隱情,我是刑警寧澤囱皿,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布勇婴,位于F島的核電站,受9級(jí)特大地震影響嘱腥,放射性物質(zhì)發(fā)生泄漏耕渴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一齿兔、第九天 我趴在偏房一處隱蔽的房頂上張望橱脸。 院中可真熱鬧,春花似錦分苇、人聲如沸添诉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栏赴。三九已至,卻和暖如春糟红,著一層夾襖步出監(jiān)牢的瞬間艾帐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工盆偿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柒爸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓事扭,卻偏偏與公主長得像捎稚,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子求橄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • 好文章,轉(zhuǎn)載一下,有機(jī)會(huì)好好研究下 今天在研究SDWebImage和ASIHTTPRequest實(shí)現(xiàn)網(wǎng)絡(luò)圖片異步加...
    Apollo2016閱讀 1,979評(píng)論 0 2
  • TableView的重用機(jī)制今野,為了做到顯示和數(shù)據(jù)分離,IOS tableView的實(shí)現(xiàn)并且不是為每個(gè)數(shù)據(jù)項(xiàng)創(chuàng)建一個(gè)...
    陌尚煙雨遙閱讀 5,460評(píng)論 4 6
  • TableView的重用機(jī)制罐农,為了做到顯示和數(shù)據(jù)分離条霜,IOS tableView的實(shí)現(xiàn)并且不是為每個(gè)數(shù)據(jù)項(xiàng)創(chuàng)建一個(gè)...
    Levan_li閱讀 1,041評(píng)論 0 6
  • 172.簡述視圖控制器的生命周期。 1)init函數(shù)(init;initWithFrame;initWithCod...
    AlanGe閱讀 367評(píng)論 0 0
  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件涵亏,我們平時(shí)使用的軟件中到處都可以看到它的影子宰睡,類似...
    liudhkk閱讀 9,014評(píng)論 3 38