Bo2SS

Bo2SS

iOS有多少種調法?每一種都超美味!(4)

郴州砍肉粉,是兄弟就來砍


上次我們聊完了iOS 的常用 UI 組件,不知道你是否已經可以製作一些簡單的 UI 界面了呢~

但是,在實踐的過程中很難不遇到 BUG,或者結果很難直接符合預期,這個時候我們就需要用到調試功能了!

接下來,讓我們進入從《蝦票票》帶你入門 iOS 系列(4)——Xcode 調試

⚠️:本節包含的調試技巧並不局限於 iOS 開發,應該大部分 IDE 中都包含這些功能。

甜:斷點相關#

添加斷點#

添加斷點很簡單,在代碼對應行號處上單擊即可;刪除斷點時,通過將斷點標記拖出區域即可。

條件斷點#

右鍵斷點 - Edit Breakpoint,填寫合適的 Condition,則運行到斷點處時,只有符合 Condition 時才觸發斷點,暫停⏸️代碼運行。

斷點處自動執行任務#

右鍵斷點 - Edit Breakpoint,添加 Action,如 p cnt (調試命令類型),即在經過該斷點時,打印 cnt 變量。

勾選下面的 Options,即可在執行上述 Action 後繼續運行代碼,而不暫停。

斷點忽略#

右鍵斷點 - Edit Breakpoint,如紅框所示,則會忽略第 1 次觸發斷點的情況,在第 2 次觸發斷點時才會暫停,一般用於忽略初始化的情況。

異常斷點#

在斷點導航欄的左下方可以添加異常類型的斷點。

當發生異常時,則不會導致 Crash,而是在即將 Crash 處暫停,此時可以很清晰地查看調用堆棧(詳見下一小節介紹),定位 Crash 根源

符號斷點#

在斷點導航欄的左下方可以添加符號類型的斷點,設置 Symbol 為某種類型的方法,如 - [UIViewController viewDidLoad] ,即設置了該類方法的通用斷點,而不需要在每個調用處添加斷點。

PS:參考Xcode 高級調試技巧,你知道嗎?—— 簡書

酸:調用堆棧查看#

進入斷點時,有3 種方式查看當前的調用堆棧。

斷點導航欄#

斷點導航欄區域顯示了所有線程以及每個線程中的方法調用堆棧,0 代表棧頂方法,即當前方法,數字大的調用數字小的。

PS:上圖中省略的方法 2~28 調用的是 iOS 系統底層,因為 iOS 並不是開源的,所以看不到底層的調用堆棧。

下方工具欄#

下方工具欄的項目名稱處展示了與斷點導航欄相同的效果。

調試區域#

調試區域可以通過輸入 thread backtrace 命令,以文本方式展示當前調用堆棧。

此外,還可以通過 thread info [i] 查看線程 i 的基本信息。

PS:參考iOS 打印函數調用棧,查看變量在何處調用——CSDN

辣:3D 視圖層級檢查#

在使用 App 時,點擊下方工具欄的紅框按鈕,即可查看 App 當前界面(見下圖左邊模擬器)的 3D 視圖層級(見下圖右邊 3D 圖)。

通過下方工具欄,從左至右,我們可以:調節視圖層級之間的距離遠近|展示被裁減的內容、展示約束、改變視圖模式、改變背景|選擇 2D/3D 視圖|縮放|調整可視視圖的範圍。

此外,右鍵某一個圖層,選項如下圖,點擊Reveal in Debug Navigator,即可查看該圖層在所有圖層中的位置,方便捋清圖層之間的嵌套關係。

總的來說,3D 視圖層級檢查非常適合檢查 UI 問題


好了,短暫的時光總是這麼短暫,這期是不是非常簡短又實用呢?尤其是斷點的一些高級調試技巧。

👏希望對你有所幫助,歡迎留言交流!

下周再見#

我們再來瞅瞅《蝦票票》App:

可以看到,除了 UI 界面,它還包含這些功能:拉取網絡電影數據,下拉刷新,上拉加載更多,菊花 loading 交互等等。那麼這些功能是不是很難實現哇?👀

也許它們是很難實現,但這並不重要,網上有很多開源的第三方庫,它們已經實現了上述功能,我們只要會拉取它們並使用即可。


這也就是我們下周要聊的內容了:CocoaPods——iOS 開發的第三方庫依賴管理工具。

🎺敬請期待

——湖南降溫太快了,回深圳避寒🚄

2021.10.9

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。