對(duì)于單元格重用的理解
當(dāng)屏幕上滑出屏幕時(shí),系統(tǒng)會(huì)把這個(gè)單元格添加到重用隊(duì)列中,等待被重用,當(dāng)有新單元從屏幕外滑入屏幕內(nèi)時(shí),從重用隊(duì)列中找看有沒(méi)有可以重用的單元格,若有,就直接用,沒(méi)有就重新創(chuàng)建一個(gè)。
解決cell重用的問(wèn)題
UITableView通過(guò)重用單元格來(lái)達(dá)到節(jié)省內(nèi)存的目的,通過(guò)為每個(gè)單元格指定一個(gè)重用標(biāo)示(reuseidentifier),即指定了單元格的種類,以及當(dāng)單元格滾出屏幕時(shí),允許恢復(fù)單元格以便復(fù)用。對(duì)于不同種類的單元格使用不同的ID,對(duì)于簡(jiǎn)單的表格,一個(gè)標(biāo)示符就夠了。
如一個(gè)TableView中有10個(gè)單元格,但屏幕最多顯示4個(gè),實(shí)際上iPhone只為其分配4個(gè)單元格的內(nèi)存,沒(méi)有分配10個(gè),當(dāng)滾動(dòng)單元格時(shí),屏幕內(nèi)顯示的單元格重復(fù)使用這4個(gè)內(nèi)存。實(shí)際上分配的cell的個(gè)數(shù)為屏幕最大顯示數(shù),當(dāng)有新的cell進(jìn)入屏幕時(shí),會(huì)隨機(jī)調(diào)用已經(jīng)滾出屏幕的Cell所占的內(nèi)存,這就是Cell的重用。
對(duì)于多變的自定義Cell,這種重用機(jī)制會(huì)導(dǎo)致內(nèi)容出錯(cuò),為解決這種出錯(cuò)的方法,把原來(lái)的
UITableViewCell*cell = [tableview dequeueReusableCellWithIdentifier:defineString]修改為:UITableViewCell*cell = [tableview cellForRowAtIndexPath:indexPath];
這樣就解決掉cell重用機(jī)制導(dǎo)致的問(wèn)題