循環(huán)利用
- tableView顯示單組數(shù)據(jù)的時候,總是顯示很多的數(shù)據(jù)速挑,當然tableView不可能一次加載這么多的數(shù)據(jù),那樣會浪費很多的內(nèi)存空間副硅。感覺在手機看來姥宝,內(nèi)存的空間,總是比處理器的資源更加珍貴恐疲。這時腊满,就需要用到性能優(yōu)化了。
- tableView自身會有一個緩存培己,將cell綁定標識符來進行識別碳蛋,并實現(xiàn)內(nèi)存空間的循環(huán)利用。當然一開始緩存中并沒有這樣的cell省咨,所以需要初始創(chuàng)建若干cell肃弟,當此cell不再視野中時,就會被拋棄到緩存中零蓉,然后被賦予另一個數(shù)據(jù)笤受,仍舊是同樣的內(nèi)存空間,并顯示出來敌蜂。
- 當cell滾動非陈崾蓿快的時候,cell的覆蓋并非是按照順序進行的章喉。
- dequeueReusableCellWithIdentifier:汗贫,去緩存池中查找可循環(huán)利用的cell,如果沒有的話秸脱,就需要自己去創(chuàng)建了落包。在storyboard設置有identifier的cell,不需要自己創(chuàng)建摊唇,默認的回去storyboard里面找有沒有這個標識符的cell妥色。
- reigsterClass
//objc
// 注冊某個標識對應的cell類型
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
-
幾個常用的方法
- select
- deselect
- willSelect
- willDeselect
- heightForRow
- viewForHeader
- heightForHeader
tableViewDelegate 協(xié)議繼承于 scrollViewDelegate,可以自動繼承了方法scrollViewDidScroll
cell
-
cell的屬性
- selectionStyle 選中的樣式
- selectedBackgroundView 選中的背景色視圖
- backgroundColor / backgroundView 默認的背景色
- accessoryType / accessoryView 設置指示器
-
定義等高的cell
- xib生成cell
- registerNib
- storyboard生成cell
- 代碼生成cell遏片,使用frame來約束嘹害,當父控件的frame發(fā)生改變的時候撮竿,自動調(diào)用layoutSubViews: 來對子控件自動布局
- 代碼生成cell,使用autoLayout自動布局笔呀,不需要放在layoutSubviews:方法中
- 技巧:通過設置背景色幢踏,來查看約束是否正確,或者用層級調(diào)試工具degug
- xib生成cell
-
定義非等高的cell
- 當cell的寬度隨著UILable中字數(shù)以及UIImageView的有無许师,來隨時調(diào)整cell的高度
- heightForRowAtIndexPath: 方法的調(diào)用是在cellForRowAtIndexPath:之前房蝉。等程序確定了所有行的高度之后,才會調(diào)用返回cell的函數(shù)微渠。
- 在heightForRowAtIndexPath:中調(diào)用cellForRowAtIndexPath:搭幻。返回cell的函數(shù)是拿出顯示出來的cell。當cell還沒有創(chuàng)建的時候逞盆,返回來的是nil檀蹋。
那么cell的高度到底如何來確定呢
- 使用estimatedHeightForRowAtIndexPath:方法,當程序知道了估計的高度之后云芦,先調(diào)用cellForRowAtIndexPath:俯逾,然后再調(diào)用heightForRowAtIndexPath:。
- 由于UITableViewController不知道創(chuàng)建cell內(nèi)部的子控件細節(jié)舅逸;在cell的自定義代碼中桌肴,返回height函數(shù),讓外界來調(diào)用琉历。
- 強制布局 [cell layoutIfNeeded]坠七,這個很重要。一般情況下旗笔,控件的屬性布局在tableView顯示之前的那一刻去計算灼捂,但是要提前獲取這些cell的高度,就需要強制去提醒tableView現(xiàn)在就去計算换团。
- KVC 鍵值編碼
- 方法:setValuesForKeysWithDictionary
- 不是按照順序匹配,是找到與字典的key同屬性名的value宫蛆,并設置
- number -> bool 根據(jù)類型會有自動轉(zhuǎn)化艘包,有點智能
tips
- static 修飾局部變量的時候,初始化一次耀盗,內(nèi)存中只有一份想虎。防止一個對象被連續(xù)的創(chuàng)建被銷毀,但是設置成全局變量又有著代碼管理的復雜性弊端叛拷。
- 定義一條線: separator分割線 將UIView的高度設置成1即可舌厨。