UITableview是大家常用的UIKit組件之一,使用中我們最常遇到的就是對delegate和dataSource這兩個委托的使用。我們大多數(shù)人可能知道當reloadData這個方法被調用時,delegate和dataSource就會被回調,但是其中具體的細節(jié),可能很多人不會去探究。
我最近有興趣來探討這個問題是因為我最近遇到過dataSource中有的方法被調用,但是有的方法沒有被調用的情況,同時你會發(fā)現(xiàn)當tableview被add到一個superView的時候,也會觸發(fā)了reloadData一樣的回調。那么這兩個委托究竟是怎么執(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這個方法是用來構建table的,包括cell、section,而且只會對可見的行進行重新的繪制,當tableview想要完整的加載數(shù)據(jù)時,delegate和data source會調用此方法。增加刪除行,尤其是需要block動畫的時候不用用它。
從這里只能看出個大概,并沒有解釋調用的原理。那么讓我們先寫一個最基本的tableview實現(xiàn),然后對delegate和data source的回調設置一下斷點看看。
- (void)viewDidLoad { [super viewDidLoa