在Xcode 8中,您可以單擊“調(diào)試內(nèi)存圖”按鈕,在調(diào)試工具欄中(顯示在屏幕底部):
只需標(biāo)識(shí)左側(cè)面板中您認(rèn)為應(yīng)該已解除分配的對(duì)象,它將顯示對(duì)象圖(如上面的主畫布所示)。這對(duì)于快速確定在所涉對(duì)象上建立強(qiáng)引用的位置非常有用。從這里開始,您可以開始您的研究,診斷為什么這些強(qiáng)引用沒(méi)有得到解決(例如,如果所討論的對(duì)象具有來(lái)自本應(yīng)被取消分配的其他對(duì)象的強(qiáng)引用,也可以查看該對(duì)象的圖表,您可能會(huì)發(fā)現(xiàn)這個(gè)問(wèn)題(例如,強(qiáng)引用周期、重復(fù)計(jì)時(shí)器等)。
注意,在右邊的面板上,我看到了呼叫樹。我是通過(guò)打開方案設(shè)置中的“malloc堆?!比罩具x項(xiàng)來(lái)實(shí)現(xiàn)這一點(diǎn)的:
無(wú)論如何,這樣做之后,您可以單擊上面第一個(gè)屏幕快照的右面板中的堆棧跟蹤中顯示的相關(guān)方法調(diào)用旁邊的箭頭,您可以看到最初建立強(qiáng)引用的位置:
上述內(nèi)存診斷技術(shù)(及更多)將在WWDC 2016的后期演示。用Xcode進(jìn)行可視化調(diào)試.
在我最初的回答中,傳統(tǒng)的儀器技術(shù)(如果使用舊版本的Xcode特別有用)將在下面描述。
我建議使用具有“記錄參考計(jì)數(shù)”功能的儀器“分配”工具:
然后,您可以在“儀器”中運(yùn)行該應(yīng)用程序,然后搜索您知道正在泄漏的類,然后單擊箭頭鉆進(jìn)去:
然后,您可以使用右側(cè)的“ExtendedDetails”面板鉆研詳細(xì)信息并查看堆棧跟蹤:
在“擴(kuò)展詳細(xì)信息”面板中,將注意力集中在黑色代碼上,而不是系統(tǒng)調(diào)用的灰色代碼上。無(wú)論如何,在“擴(kuò)展詳細(xì)信息”面板中,您可以鉆到源代碼中,在儀器中:
有關(guān)使用儀器追蹤記憶體問(wèn)題的更多資料及示范,請(qǐng)參閱: