關情紙尾-----UIKit基礎-UITableView

1、基本介紹緩存

在iOS中,要實現表格數據展現,最經常使用的作法就是使用UITableView,UITableView繼承自UIScrollView,所以支持垂直滾動,⽽且性能極佳 。性能

UITableView有兩種風格:UITableViewStylePlain和UITableViewStyleGrouped。這二者操做起來其實並無本質區別,只是後者按分組樣式顯示,前者按照普通樣式顯示而已。先看一下二者的應用:spa

 

2、UItableview展現數據的過程對象

♥ UITableView須要一個數據源(dataSource)來顯示數據
♥ UITableView會向數據源查詢一共有多少行數據以及每⼀行顯示什麼數據等blog

♥ 沒有設置數據源的UITableView只是個空殼繼承

♥ 凡是遵照UITableViewDataSource協議的OC對象,均可以是UITableView的數據源 內存

 展現數據的過程:字符串

(1)調用數據源的下面⽅法得知一共有多少組數據it

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;io

(2)調用數據源的下面⽅法得知每一組有多少行數據
  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

(3)調⽤數據源的下⾯⽅法得知每⼀⾏顯示什麼內容

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

注意:UItableview在默認狀況下是 UITableViewStylePlain,能夠在右側設置style

3、自帶的UITableViewCell

一、UITableViewCell的結構

 

二、cell的重複使用原理

iOS設備的內存有限,若是用UITableView顯示成千上萬條數據,就須要成千上萬個UITableViewCell對象的話,那將會耗盡iOS設備的內存。要解決該問題,須要重用UITableViewCell對象

♥ 重用原理:當滾動列表時,部分UITableViewCell會移出窗口,UITableView會將窗口外的UITableViewCell放入一個對象池中,等待重用。當UITableView要求dataSource返回UITableViewCell時,dataSource會先查看這個對象池,若是池中有未使用的UITableViewCell,dataSource會用新的數據配置這個UITableViewCell,而後返回給UITableView,從新顯示到窗口中,從而避免建立新對象

 

還有一個很是重要的問題:有時候須要自定義UITableViewCell(用一個子類繼承UITableViewCell),並且每一行用的不必定是同一種UITableViewCell,因此一個UITableView可能擁有不一樣類型的UITableViewCell,對象池中也會有不少不一樣類型的UITableViewCell,那麼UITableView在重用UITableViewCell時可能會獲得錯誤類型的UITableViewCell

解決方案:UITableViewCell有個NSString *reuseIdentifier屬性,能夠在初始化UITableViewCell的時候傳入一個特定的字符串標識來設置reuseIdentifier(通常用UITableViewCell的類名)。當UITableView要求dataSource返回UITableViewCell時,先經過一個字符串標識到對象池中查找對應類型的UITableViewCell對象,若是有,就重用,若是沒有,就傳入這個字符串標識來初始化一個UITableViewCell對象

4、cell的重用代碼

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.定義一個cell的標識
      static NSString *ID = @"mjcell";
    
    // 2.從緩存池中取出cell
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    // 3.若是緩存池中沒有cell
      if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    
    // 4.設置cell的屬性...
    
      return cell;
相關文章
相關標籤/搜索