UITableview是大家常用的UIKit組件之一,使用中我們最常遇到的就是對delegate和dataSource這兩個委托的使用。我們大多數(shù)人可能知道當(dāng)reloadData這個方法被調(diào)用時,delegate和dataSource就會被回調(diào),但是其中具體的細(xì)節(jié),可能很多人不會去探究。
我最近有興趣來探討這個問題是因為我最近遇到過dataSource中有的方法被調(diào)用,但是有的方法沒有被調(diào)用的情況,同時你會發(fā)現(xiàn)當(dāng)tableview被add到一個superView的時候,也會觸發(fā)了reloadData一樣的回調(diào)。那么這兩個委托究竟是怎么執(zhí)行的呢?

  • 我們首先來看看蘋果文檔對reloadData的描述

    Call this method to reload all the data that is used to construct the table, 
    including cells, section headers and footers, index arrays, and so on. For 
    efficiency, the table view redisplays only those rows that are visible. It adjusts 
    offsets if the table shrinks as a result of the reload. The table view’s delegate or 
    data source calls this method when it wants the table view to completely reload 
    its data. It should not be called in the methods that insert or delete rows, 
    especially within an animation block implemented with calls to beginUpdates and 
    endUpdates.

    大致的意思就是說reload這個方法是用來構(gòu)建table的,包括cell、section,而且只會對可見的行進(jìn)行重新的繪制,當(dāng)tableview想要完整的加載數(shù)據(jù)時,delegate和data source會調(diào)用此方法。增加刪除行,尤其是需要block動畫的時候不用用它。
    從這里只能看出個大概,并沒有解釋調(diào)用的原理。

  • 那么讓我們先寫一個最基本的tableview實現(xiàn),然后對delegate和data source的回調(diào)設(shè)置一下斷點看看。

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動開發(fā)培訓(xùn)

- (void)viewDidLoad {
    [super viewDidLoa
        
		

網(wǎng)友評論