首先,標準開局:打開 Xcode,新建一個項目。
隨後,在 Main.storyboard 中拖入一個 Table View Controller,將「箭頭」(Storyboard Entry Point)拖到它身上。
Main.storyboard
然後新建一個 UITableViewController 子類:
UITableViewController
再回到 Storyboard,將控制器設置為 DemoTableViewController:
DemoTableViewController
選中一個 Cell,設置它的 Reuse Identifier 為 Cell:
以上均為基本操作,此處假定你已經懂得了。如果你還不會,你應該從更基礎的地方學習。
斷點(Breakpoint)
Table view controller 有一些生命周期方法,除此以外,它還負責給 table view 提供數據、響應它的事件等等:
這些個方法,大家都已經熟絡了。但你知不知道它們被調用的先後順序是怎樣的?
通過設置斷點,你就能清楚地知道這一切了:
只要滑鼠在左邊點一下,就能把斷點設置上了。
這樣,程序就會在斷點位置暫停(當然,前提是 Xcode 必須和你的 App 保持連接):
擊中斷點時,斷點所在的那行代碼就綠了,提示你當前的狀態:線程 1 擊中斷點 1.1。
從左側面板可以看到,你現在正位於線程 1,處在 DemoTableViewController 實例的 viewDidLoad() 方法中。
viewDidLoad()
底部面板有一排工具欄。工具欄的下方左半邊,顯示了當前的所有變數;右半邊有個神秘的 (lldb),它就是本系列文章的主角,但暫時先不提。
(lldb)
點擊工具欄的繼續按鈕,程序就會繼續運行:
繼續不久,程序又會再次擊中下一個斷點。擊中,繼續,擊中,繼續……
這樣,你就知道這些方法分別是什麼時候被調用的了。
最終的調用順序是:
viewWillAppear(_:)
numberOfSections(in:)
tableView(_:, numberOfRowsInSection:) -> Int
viewWillLayoutSubviews()
tableView(_:, cellForRowAt:) -> UITableViewCell
tableView(_:, heightForRowAt:) -> CGFloat
viewDidLayoutSubviews()
viewDidAppear(_:)
仔細看看,是不是和你腦海中的一樣呢?