IOS開發之 UITableView重用機制

2021-06-18 17:33:16 字數 1583 閱讀 2716

//對table view的資料進行繫結,即填充cell,自動呼叫n次

- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath

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的情況

iOS開發之歸檔

歸檔是一種物件都可以實現的更加常規的序列化方式。適用對模型物件進行歸檔的技術可以輕鬆將複雜物件寫入檔案和從檔案中進行讀取。大多數支援儲存資料的foundation和cocos touch類都遵循nscoding協議 不過有些例外,例如uiiamge 因此對於大多數系統提供的類而言,歸檔比較輕鬆。如果...

iOS 開發之封裝

繼承,封裝,多型是物件導向程式設計的三大基石 在ui 中,封裝可以降低 的冗餘度,節省 量,避免了重複 在這裡簡單的封裝了乙個label和乙個textfield,組成了乙個登陸介面的樣式 新建了乙個檢視,這是檢視的.h檔案,這個檢視的一些方法 這個是.m檔案中 對label和textfield進行布...

IOS開發之 入門

目前主要的移動開發平台有 android ios windowsphone,前兩者佔據著絕大多數的終端應用,我們常說的移動開發就是指 android和ios開發。本位主要講述ios的開發。開發ios應用,需要專門的硬體裝置 開發工具 特定語言的支援,下面將逐一介紹這些知識點 硬體mac筆記本或一體機...