背景

Xcode中的符號(hào)斷點(diǎn)(Symbolic breakpoint)可以針對(duì)某一個(gè)方法設(shè)置斷點(diǎn)并暫停執(zhí)行(如不懂符號(hào)斷點(diǎn)的小伙伴們網(wǎng)上隨便一搜都能入門了)。因此我們可以利用這特性,維護(hù)項(xiàng)目的時(shí)候可以不用看源代碼直接運(yùn)行APP就能快速的了解到當(dāng)前所運(yùn)行的頁面是屬于哪一個(gè)ViewController。
本技巧需了解符號(hào)斷點(diǎn),本篇只是利用此特性來總結(jié)的一個(gè)開發(fā)技巧分享。所以不涉及到斷點(diǎn)這一塊的知識(shí)。
開始
既然我們知道符號(hào)斷點(diǎn)(Symbolic breakpoint)可以讓某一個(gè)函數(shù)暫停,而我們的ViewController幾乎都有實(shí)現(xiàn)viewDidLoad方法(沒實(shí)現(xiàn)的我還沒真沒碰到過。。。),然而每進(jìn)入一個(gè)頁面都會(huì)調(diào)用viewDidLoad函數(shù),因此我們就打一個(gè)符號(hào)斷點(diǎn)讓它暫停在UIViewController的viewDidLoad方法,然后每次進(jìn)入到APP的頁面就可以在我們的Xcode的左側(cè)堆棧一欄看到調(diào)用順序。
斷點(diǎn)設(shè)置GIF圖如下:

左側(cè)堆棧示例圖如下:

最下面那個(gè)黑色的類名就是我們APP頁面顯示所對(duì)應(yīng)的ViewController
優(yōu)化
雖然以上步驟是實(shí)現(xiàn)了我們的需求,but...每次要找一個(gè)頁面是屬于哪一個(gè)ViewController的時(shí)候,都會(huì)在xcode里暫停,而且還要在左側(cè)欄的堆棧,而且重點(diǎn)還是每次我顯示一個(gè)頁面他都要執(zhí)行這個(gè)符號(hào)斷點(diǎn)并且暫停在Xcode里(雖然可以禁止斷點(diǎn),當(dāng)需要使用的時(shí)候在打開,但筆者覺得還是略麻煩)。
so... 筆者覺得把斷點(diǎn)加在BaseViewController里,然后我們讓斷點(diǎn)的automatically continue after evaluating actions選項(xiàng)勾上,這樣它就會(huì)安安靜靜的執(zhí)行不會(huì)暫停了。然后我們?cè)跀帱c(diǎn)里添加一個(gè)debug命令,命令為po self把當(dāng)前的ViewController打印在控制臺(tái)即可(如下示例圖)。

大多數(shù)項(xiàng)目里的
ViewController都是繼承自BaseViewController,而BaseViewController又是繼承與UIViewController的。而上面的示例圖里的NMBaseViewController就是我們項(xiàng)目的BaseViewController。所以把符號(hào)斷點(diǎn)設(shè)置到NMBaseViewController即可,至于為什么不設(shè)置到UIViewController,那是因?yàn)樵诳刂婆_(tái)里使用po命令找不到self這個(gè)標(biāo)志。
最后
只是根據(jù)個(gè)人經(jīng)驗(yàn)總結(jié)出來的一個(gè)小技巧,個(gè)人覺得用處還是蠻大的。因?yàn)楫?dāng)你在維護(hù)項(xiàng)目的時(shí)候,有時(shí)候要修改某一個(gè)頁面的東西往往要先找到這個(gè)頁面所對(duì)應(yīng)的Controller,如果純屬的去看代碼追蹤流程來得知某一頁面是屬于哪一個(gè)Controller,工作量必然很大。而且一個(gè)項(xiàng)目稍微偏大點(diǎn),有時(shí)候自己寫過的東西都忘了那個(gè)頁面所對(duì)應(yīng)的Controller叫什么名字了。。所以用這個(gè)小技巧能快速定位到頁面所對(duì)應(yīng)的Controller。
當(dāng)然如果有更好的技巧也歡迎告知,以上純屬筆者個(gè)人經(jīng)驗(yàn)分享。如需轉(zhuǎn)載請(qǐng)注明原文地址。