目錄

  • Xcode Debug 指南(一)– 當前
  • Xcode Debug 指南(二)
  • Xcode Debug 指南(三)
  • Xcode Debug 指南(四)


準備工作

首先,標準開局:打開 Xcode,新建一個項目。

隨後,在 Main.storyboard 中拖入一個 Table View Controller,將「箭頭」(Storyboard Entry Point)拖到它身上。

「初始化」 Storyboard

然後新建一個 UITableViewController 子類:

創建 Table view controller 子類

再回到 Storyboard,將控制器設置為 DemoTableViewController

設置 Controller 類型

選中一個 Cell,設置它的 Reuse Identifier 為 Cell:

設置 Reuse ID

以上均為基本操作,此處假定你已經懂得了。如果你還不會,你應該從更基礎的地方學習。


斷點(Breakpoint)

Table view controller 有一些生命周期方法,除此以外,它還負責給 table view 提供數據、響應它的事件等等:

方法們

這些個方法,大家都已經熟絡了。但你知不知道它們被調用的先後順序是怎樣的?

通過設置斷點,你就能清楚地知道這一切了:

設置斷點

只要滑鼠在左邊點一下,就能把斷點設置上了。

這樣,程序就會在斷點位置暫停(當然,前提是 Xcode 必須和你的 App 保持連接):

命中斷點

擊中斷點時,斷點所在的那行代碼就綠了,提示你當前的狀態:線程 1 擊中斷點 1.1。

從左側面板可以看到,你現在正位於線程 1,處在 DemoTableViewController 實例的 viewDidLoad() 方法中。

底部面板有一排工具欄。工具欄的下方左半邊,顯示了當前的所有變數;右半邊有個神秘的 (lldb),它就是本系列文章的主角,但暫時先不提。

點擊工具欄的繼續按鈕,程序就會繼續運行:

繼續運行

繼續不久,程序又會再次擊中下一個斷點。擊中,繼續,擊中,繼續……

這樣,你就知道這些方法分別是什麼時候被調用的了。

最終的調用順序是:

  1. viewDidLoad()
  2. viewWillAppear(_:)
  3. numberOfSections(in:)
  4. numberOfSections(in:)
  5. tableView(_:, numberOfRowsInSection:) -> Int
  6. viewWillLayoutSubviews()
  7. numberOfSections(in:)
  8. tableView(_:, numberOfRowsInSection:) -> Int
  9. tableView(_:, cellForRowAt:) -> UITableViewCell

  10. tableView(_:, heightForRowAt:) -> CGFloat
  11. tableView(_:, cellForRowAt:) -> UITableViewCell
  12. tableView(_:, heightForRowAt:) -> CGFloat
  13. viewDidLayoutSubviews()
  14. viewWillLayoutSubviews()
  15. viewDidLayoutSubviews()
  16. viewDidAppear(_:)
  17. viewWillLayoutSubviews()
  18. viewDidLayoutSubviews()

仔細看看,是不是和你腦海中的一樣呢?


推薦閱讀:
相关文章