現象
建立 TTParent (strong children) 與 TTChild (strong parent) 形成循環引用,Instruments Leaks 偵測到紅色洩漏標記,但 **Cycles & Roots → Graph 區域空白**,無法視覺化引用鏈。
原因分析
- Instruments 的循環引用偵測演算法有閾值與採樣限制,極短生命週期物件 (按鈕點擊中建立、隨即釋放) 可能未被掃描到完整圖譜。
- Xcode 6 早期版本 Graph 渲染存在已知 Bug,對臨時物件支援不佳。
驗證與替代方案
- 延長物件生命週期:將 Parent/Child 存為屬性或單例,再觸發 Leaks 掃描。
- 使用 Debug Memory Graph (Xcode 8+):暫停執行 → 點擊 Debug Navigator → Memory Graph,可直接看到雙向箭頭循環。
- 靜態分析:
Product → Analyze (Shift+Cmd+B) 會標記潛在循環引用。
- 手動檢查:Delegate、Block、NSTimer、CADisplayLink 等常見循環來源,加
weak 修飾。
最佳實踐
不依賴 Instruments Graph 確認循環引用,**編碼階段即遵循「Delegate 弱引用、Block 捕獲 self 用 weak、Block 內再 strong」原則**,配合 Memory Graph 定期巡檢。