ios開發ui篇—uitableviewcell的效能問題
一、uitableviewcell的一些介紹
uitableview的每一行都是乙個uitableviewcell,通過datasource的 tableview:cellforrowatindexpath:方法來初始化每⼀行
uitableviewcell內部有個預設的子檢視:contentview,contentview是uitableviewcell所顯示內容的父檢視,可顯示一些輔助指示檢視
輔助指示檢視
的作⽤是顯示乙個表示動作的圖示,可以通過設定
uitableviewcell
的 accessorytype
來顯示,預設是
uitableviewcellaccessorynone(
不顯⽰示輔助指⽰示檢視
), 其他值如下
:uitableviewcellaccessorydisclosureindicator
uitableviewcellaccessorydetaildisclosurebutton
uitableviewcellaccessorycheckmark
還可以通過cell的accessoryview屬性來自定義輔助指示檢視(⽐如往右邊放乙個開關)
二、問題
cell的工作:在程式執行的時候,能看到多少條,它就建立多少條資料,如果檢視滾動那麼再建立新顯示的內容。(系統自動呼叫)。即當乙個cell出現在視野範圍內的時候,就會呼叫建立乙個cell。這樣的邏輯看上去沒有什麼問題,但是真的沒有任何問題嗎?
當建立呼叫的時候,我們使用nslog列印訊息,並列印建立的cell的位址。我們發現如果資料量非常大,使用者在短時間內來回滾動的話,那麼會建立大量的cell,一直開闢空間,且如果是往回滾,通過列印位址,我們會發現它並沒有重用之前已經建立的cell,而是重新建立,開闢新的儲存空間。
那有沒有什麼好的解決辦法呢?
三、cell的重用原理
(1) ios裝置的記憶體有限,如果用uitableview顯示成千上萬條資料,就需要成千上萬 個uitableviewcell物件的話,那將會耗盡ios裝置的記憶體。要解決該問題,需要重用uitableviewcell物件
(2)重⽤原理
:當滾動列表時,部分
uitableviewcell
會移出視窗,
uitableview
會將視窗外的
uitableviewcell
放入乙個物件池中,等待重用。當
uitableview
要求datasource
返回 uitableviewcell
時,datasource
會先檢視這個物件池,如果池中有未使用的
uitableviewcell
,datasource則
會用新的資料來配置這個
uitableviewcell
,然後返回給
uitableview
,重新顯示到視窗中,從而避免建立新物件 。這樣可以讓建立的cell的數量維持在很低的水平,如果乙個視窗中只能顯示5個cell,那麼cell重用之後,只需要建立6個cell就夠了。
(3)注意點:還有⼀個非常重要的問題:有時候需要自定義uitableviewcell(用⼀個子類繼 承uitableviewcell),而且每⼀行⽤的不一定是同一種uitableviewcell,所以一 個uitableview可能擁有不同型別的uitableviewcell,物件池中也會有很多不同型別的 uitableviewcell,那麼uitableview在重⽤用uitableviewcell時可能會得到錯誤型別的 uitableviewcell
解決⽅方案
:uitableviewcell
有個nsstring *
reuseidentifier
屬性,可以在初始化
uitableviewcell
的時候傳入乙個特定的字串標識來設定
reuseidentifier(
一般用uitableviewcell
的類名)
。當uitableview
要求datasource
返回uitableviewcell
時,先 通過乙個字串標識到物件池中查詢對應型別的
uitableviewcell
物件,如果有,就重用,如果沒有,就傳入這個字串標識來初始化⼀乙個
uitableviewcell
物件。
IOS UITableView下拉重新整理
給 uitableview 新增 下拉重新整理 pull refresh 屬性 親愛的,我還是有些不忍心,不過事情的經過是這樣的 cocoa touch 的 官方 sdk 裡,壓根就沒實現這個 pull refresh 的功能。恩,這事真不是賈伯斯手下幹的。然而也不是麻匪幹的。是他幹的,enorme...
iOS UItableview重用機制
重用機制的定義就是乙個節省記憶體的機制,當我們的tableview有100或更多資料是如果沒有重用機制那樣會把記憶體很快佔滿 尤其使大多數我們在cell上面放上,是乙個很佔記憶體的東西 所以我們需要重用機制來解決,重用機制就是在我們螢幕的可顯示範圍內建立cell 其餘的復用這些cell,以我個人的理...
IOS UITableView 實現LOL資料展示
本節重點 了解uitableview 的基本屬性 了解kvc.其實 我也不是很了解 效果圖 示例 控制器 sjviewcontroller.m 03.lol demo created by sj.abnormal on 15 2 7.import sjviewcontroller.h import ...