iOS UITableView快取池 重用

2021-07-07 04:21:00 字數 2271 閱讀 1789

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 ...