dequeueresablecellwithidentifier方法
//對table view的資料進行繫結,即填充cell,自動呼叫n次
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath {
uitableviewcell*cell = [tableview dequeuereusablecellwithidentifier:@"flipsidecellidentifier"];
if (cell== nil) {
cell =[[[uitableviewcell alloc] initwithframe:cgrectzero
reuseidentifier:@"flipsidecellidentifier"] autorelease];
cell.text= [soundsignatures objectatindex:indexpath.row];
return cell;
理解:每乙個uitableview裡都維護著乙個cell佇列,當uitableview剛載入的時候,cell佇列裡是沒有任何資料的。
dequeueresablecellwithidentifier從字面上理解就是"出列可重用的cell",
也就是根據乙個標識identifier從cell佇列裡取出乙個uitableviewcell,
當然了,如果cell佇列裡沒有此標識的cell,呼叫此方法的結果就是返回nil。
因此,在uitableview剛載入的時候,cell佇列裡沒有可用的cell,所以必須通過語句
cell = [[[uitableviewcell alloc] initwithstyle:uitableviewcellstyledefault reuseidentifier:cellidentifier] autorelease];
來建立對應cellidentifier標識的uitableviewcell例項。
[ tableview:cellforrowatindexpath:方法主要是根據nsindex取得乙個cell ]
而當uitableview在滾動的時候導致uitableviewcell滾出手機螢幕檢視的時候,
程式會將這乙個uitalbeviewcell例項放入此uitableview所維護的cell佇列中。
當uitableview中有新的uitableviewcell需要展現在手機螢幕檢視上時,
就會呼叫tableview:cellforrowatindexpath:方法了。
因此我們可以知道以下幾點:
1-重取出來的cell是有可能已經**過資料或者加過子檢視的,所以,
如果有必要,要清除資料(比如textlabel的text)和remove掉add過的子檢視(使用tag)。
2-這樣設計的目的是為了避免頻繁的 alloc和delloc cell物件而已,沒有多複雜。
3-設計的關鍵是實現cell和資料的完全分離
如果不想重用uitableviewcell例項,如在乙個每一行都顯示不同內容的uitableview例項時,我們可以用如下的方法:
nsstring *cellidentifier = [nsstring stringwithformat:@"cell%d%d",[indexpath section], [indexpath row]];
來重新定義標識。
這樣每一行都有其對應的identifier,從cell佇列裡取出來只有兩個結果:
1-cell佇列裡沒有此identifier對應的uitableviewcell例項,返回nil
2-cell佇列裡有此identifier對應的uitableviewcell例項,而且不會有重用到其他不同行的cell的情況
UITableView的重用機制
uitableview的重用機制是蘋果公司為了大量的資料顯示而採用的一種節省記憶體的機制,在大量資料的前提下,也需要有充足的顯示這些資料的行 也就是uitableviewcell 那麼是否需要來建立成百上千的資料行來裝這些資料,然後顯示出來呢。這將會消耗大量的記憶體,重用機制就是來解決這一問題的。重...
UITableView的重用機制
uitableviewcell tableview uitableview tableview cellforrowatindexpath nsindexpath indexpath return cell uitableview內部會有兩個nsmutablearray visiablecells內...
IOS開發之 UITableView重用機制
對table view的資料進行繫結,即填充cell,自動呼叫n次 uitableviewcell tableview uitableview tableview cellforrowatindexpath nsindexpath indexpath cell.text soundsignature...