【原】用xib自定義uitableviewcell的注意事項——重用問題 - 程式設計小翁
時間 2014-01-11 13:55:00 -原創精華區
原文 主題 uitableview
問題的提出:
有時候我們經常需要自定義tableview的cell,當cell裡面的布局較為複雜時往往捨棄純**的方式而改用xib的方式進行自定義。當我們用純**的方式布局cell時,往往會在cell的initwithstyle: reuseidentifier: 方法裡面用純**進行布局,然後在外部vc的cellforrowatindexpath方法裡面我們會這麼寫,假定自定義的cell為cell,繼承自uitableviewcell:
static nsstring *cellidentifier = @」cell」;
cell cell = (cell )[tableview dequeuereusablecellwithidentifier:cellidentifier];
if (!cell)
cell.titlelabel.text = [self.datalist objectatindex:indexpath.row];
return cell;
上述這麼寫完全沒有問題,因為教科書跟各種教程都是這麼寫的,上述**對cell進行了重用。但如果我們現在想用xib來布局呢?看到過不少**是這麼寫的:
static nsstring *cellidentifier = @」cell」;
cell cell = (cell )[tableview dequeuereusablecellwithidentifier:cellidentifier];
if (!cell)
cell.titlelabel.text = [self.datalist objectatindex:indexpath.row];return cell;唯一區別的地方在於紅色的位置:cell的初始化不再通過initwithstyle函式,因為我們現在用xib布局,所有的控制項資訊都在xib裡面,因此我們根據cell所對應的xib名稱來載入xib以建立cell。但是你注意到沒,第二種方法的紅色部分並沒有包含任何重用資訊,也就是說,每次拖動tableview,都會一直建立不同的cell,當要顯示的cell很多時記憶體問題就顯露出來了。
為了解決這個問題,我們換用另一種更好的方式。
直接放優化後的**,uinib類可以先不看,不影響**的理解:
static nsstring *cellidentifier = @」cell」;
bool nibsregistered = no;
if (!nibsregistered)
cell cell = (cell )[tableview dequeuereusablecellwithidentifier:cellidentifier];
cell.titlelabel.text = [self.datalist objectatindex:indexpath.row];
return cell;
我們可以看到,紅色部分很好地滿足了我們的需求:既從nib載入,又能對cell進行重用。下面對**進行解釋:
2.除了上述**,還需要在xib檔案中做如下設定:在cell.xib的inspector視窗中將identifier進行設定,這裡的identifier要與cellforrowatindexpath中一致。
以上就是從xib載入自定義uitableviewcell的注意事項以及解決方案,很多人採用了第二種方法,看起來雖然沒問題但是一旦記憶體吃緊的時候問題就暴露出來了!
【原】用xib自定義uitableviewcell的注意事項——重用問題 - 程式設計小翁
時間 2014-01-11 13:55:00 -原創精華區
原文 主題 uitableview
問題的提出:
有時候我們經常需要自定義tableview的cell,當cell裡面的布局較為複雜時往往捨棄純**的方式而改用xib的方式進行自定義。當我們用純**的方式布局cell時,往往會在cell的initwithstyle: reuseidentifier: 方法裡面用純**進行布局,然後在外部vc的cellforrowatindexpath方法裡面我們會這麼寫,假定自定義的cell為cell,繼承自uitableviewcell:
static nsstring *cellidentifier = @」cell」;
cell cell = (cell )[tableview dequeuereusablecellwithidentifier:cellidentifier];
if (!cell)
cell.titlelabel.text = [self.datalist objectatindex:indexpath.row];
return cell;
上述這麼寫完全沒有問題,因為教科書跟各種教程都是這麼寫的,上述**對cell進行了重用。但如果我們現在想用xib來布局呢?看到過不少**是這麼寫的:
static nsstring *cellidentifier = @」cell」;
cell cell = (cell )[tableview dequeuereusablecellwithidentifier:cellidentifier];
if (!cell)
cell.titlelabel.text = [self.datalist objectatindex:indexpath.row];return cell;唯一區別的地方在於紅色的位置:cell的初始化不再通過initwithstyle函式,因為我們現在用xib布局,所有的控制項資訊都在xib裡面,因此我們根據cell所對應的xib名稱來載入xib以建立cell。但是你注意到沒,第二種方法的紅色部分並沒有包含任何重用資訊,也就是說,每次拖動tableview,都會一直建立不同的cell,當要顯示的cell很多時記憶體問題就顯露出來了。
為了解決這個問題,我們換用另一種更好的方式。
直接放優化後的**,uinib類可以先不看,不影響**的理解:
static nsstring *cellidentifier = @」cell」;
bool nibsregistered = no;
if (!nibsregistered)
cell cell = (cell )[tableview dequeuereusablecellwithidentifier:cellidentifier];
cell.titlelabel.text = [self.datalist objectatindex:indexpath.row];
return cell;
我們可以看到,紅色部分很好地滿足了我們的需求:既從nib載入,又能對cell進行重用。下面對**進行解釋:
2.除了上述**,還需要在xib檔案中做如下設定:在cell.xib的inspector視窗中將identifier進行設定,這裡的identifier要與cellforrowatindexpath中一致。
以上就是從xib載入自定義uitableviewcell的注意事項以及解決方案,很多人採用了第二種方法,看起來雖然沒問題但是一旦記憶體吃緊的時候問題就暴露出來了!
java DOM 注意事項
1.w3c把標籤內的文字部分也定義成乙個node 2.element物件代表的是xml文件中的標籤元素 繼承於node,亦是node的最主要的子物件 3.attr實際上是包含在element中的,它並不能被看作是element的子物件,因而在dom中attr並不是dom樹的一部分,所以node中的 ...
static注意事項
static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種只指在c語言中使用,第三種在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數 在...
CSS注意事項
一 寬度 高度 對齊方式請別忘記他們 只要你時刻記得 div css 不變形的秘密你已經掌握了 90 也有對齊方式哦!一定要掌握當 對齊方式不同是 布局出現的問題!左右左 能不變形嗎?預設 是要換行的哦 div css的 居中對齊 是有條件的哦 所有當同級元素的對齊方式都為居中對齊的時候可以採用居中...