2014-02-18 31 views
1

我有一個ios電子郵件應用程序,一切運行良好,除了一個特定的用戶帳戶信息我得到崩潰相關的看起來像一個overreleased對象。NSZombies未啓用時崩潰,啓用時工作

問題是,如果我啓用NSZombies(或使用儀器)崩潰不會發生。每當NSZombies被禁用時,它會發生,但是當我想看看應用程序按預期發佈的內容時。

所以我的問題是,如果啓用殭屍阻止它發生,我該如何追蹤這個?此外,殭屍究竟做了什麼來防止崩潰,是否掛在對象上來監視它?

+0

您是否添加了「所有異常」斷點?這可能會幫助你追蹤崩潰。 – rckoenes

回答

1

所以我的問題是,如果啓用殭屍可以防止它發生,我該如何跟蹤它?

如果可能的話,少用-autorelease s。

你可能會考慮Malloc Stack Logging來縮小分配範圍或調用網站的範圍。

創建本地自動釋放池也可以幫助您確定範圍。

有時,Memory Scribbling或Guard Malloc可以提供幫助。

只需在Sim/Device上運行就可以產生差異 - 甚至是不同的設備型號。

消除所有其他內存問題(例如泄漏,循環引用)也可以幫助您更接近識別此問題。

您也可以考慮檢查地址,如果它是帶標記的指針。

即使在更多地方引入消息傳遞功能也有助於縮小範圍。 是一個殭屍,[obj self]將是一個錯誤。

殭屍究竟做了什麼來防止崩潰,它掛在物體上以監視它嗎?

是。對象的-dealloc將照常進行調用,但是(通常)分配所使用的內存將不會返回,並且該實例將變爲殭屍 - 如果發生消息,則會生成運行時錯誤。