2

我目前正在與一些人合作開發一個ios項目,其中一個人決定在應用程序的一部分中使用ARC。NSZombie有沒有可能沒有用ARC指出EXC_BAD_ACCESS?

Unfotunatly,從後臺回來時,我們目前正在經歷的一些崩潰。

下面是我們按照應用程序崩潰的步驟,我們跟iOS模擬器執行它們:

  1. 啓動應用程序
  2. 再上一個視圖控制器A(與ARC編碼)
  3. GET在視圖控制器B(不與ARC編碼-to說實話,我不 知道這是否是有關的事宜)
  4. 將應用程序在後臺。
  5. 模擬內存再次警告(THX模擬器)
  6. 啓動應用程序,我們將在ViewController中乙
  7. 反悔的viewController一個
  8. 指向與主要功能的應用程序崩潰 EXC_BAD_ACCESS

我們也嘗試使用NSZombieEnabled爲YES,但是當我們這樣做時,應用程序不會崩潰,並保持運行完美,所以我們不知道是否有可能是NSZombieEnabled不很好地工作弧?

如果任何人都可以給我一個關於ARC和NSZombieEnabled的快速和清晰的見解,我會認爲我知道它是如何工作的,但顯然我必須錯過一些東西。

不管怎樣,謝謝您的幫助和時間。

回答

0
更好

比使用NSZombieEnabled,你應該個人項目,並使用殭屍工具。當你做同樣的事情時,它應該停止並說「殭屍消息」,在那裏你可以點擊一個箭頭看到這個殭屍類,以及它被分配/釋放的地方。

我不認爲崩潰與ARC有關,而是在viewDidUnload中,您正在釋放某些內容,然後不設置對nil的引用 - 當您回來時它會嘗試使用無效的引用。

也許你會更好,如果一切使用ARC,因爲它確實有助於治癒這樣的問題(bug是在非ARC代碼很可能)。

+0

謝謝您的回答中,我們發現了這個問題,你在某種程度上是正確的,這是沒有設置在viewDidUnload零的屬性,它實際上是一個比較複雜一點。它是一個包含iCarousel視圖(庫)中使用的元素的數組,這些項目是異步加載圖像的,在viewDidLoad中我們調用了一個函數來重置該數組,因此所有元素都被釋放,並且當圖像加載時它正在崩潰。看起來,ARC並不能避免NSZombie的工作,在這種情況下,這是因爲我們沒有在代碼中明確引用崩潰項目。 – Saliom