iOS開發 表載入資料時,資料混亂怎麼辦?!

2021-07-05 12:13:11 字數 1817 閱讀 2717

一般情況下,建立玩tableview。cellforrowatindexpath:方法中我們都是這樣寫的:

static

nsstring *cellidentifier = @

"cell"

;//初始化cell並指定其型別,也可自定義cell  

uitableviewcell *cell = (uitableviewcell*)[tableview  dequeuereusablecellwithidentifier:cellidentifier];  if

(cell == nil)

cell.text = array[indexpath.row];

return cell;

通常情況下這樣載入資料是沒有問題的。但是

uitableview

中的cell

可以有很多,一般會通過重用

cell

來達到節省記憶體的目的

:通過為每個

cell

指定乙個重用識別符號

(reuseidentifier),

即指定了單元格的種類,當

cell

滾出螢幕時

,會將滾出螢幕的單元格放入重用的

queue

中,當某個未在螢幕上的單元格要顯示的時候,就從這個

queue

中取出單元格進行重用。

但對於多變的自定義

cell

,有時這種重用機制會出錯。比如,當乙個

cell

含有乙個

uitextfield

的子類並被放在重用

queue

中以待重用,這時如果乙個未包含任何子檢視的

cell

要顯示在螢幕上,就會取出並使用這個重用的

cell

顯示在無任何子檢視的

cell

中,這時候就會出錯。

解決的方法:

1.將cell的方法從

uitableviewcell *cell = [tableview  dequeuereusablecellwithidentifier:cellidentifier]; 換成

uitableviewcell *cell = [tableview cellforrowatindexpath:indexpath];//根據indexpath準確地取出一行,而不是從cell重用佇列中取出

2.通過為每個cell指定不同的重用標示符(reuseidentifier)來解決。重用機制是根據相同的標示符來重用cell的,標示符不同的cell不能彼此重用。so,我們把每個cell的標示符設定為不同的,就可以避免不同的cell重用的問題了。

需要改的**如下:

nsstring *cellidentifier = [nsstring stringwithformat:

@"cell%d%d"

, [indexpath section], [indexpath row]];//以

indexpath

來唯一確定

cell

其他**按照一般情況書寫即可

3.刪除重用cell的所有子檢視

這個方法是通過刪除重用的cell的所有子檢視,從而得到乙個沒有特殊格式的cell,供其他cell重用

static nsstring *cellidentifier = @"cell";

uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:cellidentifier]; //

出列可重用的

cell

if (cell == nil) else }

IOS資料懶載入

懶載入,又稱為延遲載入。說的通俗一點,就是在開發中,當程式中需要利用的資源時。在程式啟動的時候不載入資源,只有在執行當需要一些資源時,再去載入這些資源。我們知道ios裝置的記憶體有限,如果在程式在啟動後就一次性載入將來會用到的所有資源,那麼就有可能會耗盡ios裝置的記憶體。這些資源例如大量資料,音訊...

資料儲存 IOS開發

常見的資料儲存方式 plist格式檔案儲存 propertlist屬性列表 nsuserdefaults儲存 解歸檔儲存 nskeyedarchiver歸檔 nskeyedunarchiver解檔 資料庫 sqlite3,基於sqlite3的fmdb,coredata plist檔案 nsuserd...

大資料開發實戰 實時資料平台和流計算

實時資料平台的支撐技術主要包含四個方面 實時資料採集 如flume 訊息中介軟體 如kafka 流計算框架 如storm,spark,flink和beam 以及資料實時儲存 如列族儲存的hbase 實時資料平台最為核心的技術是流計算。流計算的典型特徵 1 無邊界 流計算的資料源頭是源源不斷的,就像河...