2014-01-19 38 views
3

研究這個錯誤我已經注意到它是特定的代碼,但我試圖做任何項目,負荷等不斷給我同樣的錯誤後總是引用代碼的不同部分與此錯誤消息,但由於我設置的初始程序,具有確切的默認代碼沒有什麼更多,仍然收到相同的錯誤,我不會看到如何添加我的錯誤日誌可以幫助。請注意,在Xcode 5中使用sprite工具包時發生此錯誤,並且在os x 10.8.5上運行此工具,因爲提前給予您的耐心,洞察力和希望的答案。訪問已經被釋放的對象 -Xcode中不斷崩潰定線程1個EXC_BAD_ACCESS(代碼= 2點的地址= 0x8中)

+0

SpriteKit在10.8.5中不存在。這只是小牛隊。 – jemmons

回答

6

EXC_BAD_ACCESS通常是由什麼作爲一個懸擺指針引起的。

要調試此,使通過兩種殭屍對象:

  • 的Xcode:編輯方案,並選擇 '已啓用植物大戰殭屍' 複選框

Edit Scheme

  • AppCode:編輯運行的配置和設置環境變量NS_ZOMBIE_ENABLED = YES

花一些時間來學習Objective-C的引用計數存儲器模型 - 保留,版本,保持週期和自動釋放池。

你需要確保你的對象被保留,只要它被使用。在ARC(自動引用計數 - iOS的默認設置)中,這通常意味着爲將在多個類中使用的任何對象設置屬性或ivar - 將一個對象指定爲此對象的「所有者」。然後它將與「擁有」它的對象一起被釋放。

一個很好的方式來獲得Objective-C的內存模型和ARC的運作方式的理解,是在使用一個寵物項目(東西至少有2個或3視圖控制器)手動內存管理的嘗試。一旦熟悉手動內存管理,ARC將會非常容易,同時節省您的時間,打字並防止忘記釋放分配的對象。大部分/全部Objective-C基礎知識書籍將涵蓋內存管理。 (我已經忘記了我讀過的那個名字)。

的常見原因

假設你有一個UIViewController和你想從當前視圖控制器中呈現視圖。 。 。其分配如下:

UIViewController* anotherController = [UIViewController make]; 
[self.view addSubView another.view]; 

'anotherController'現在將被釋放,因爲它不再使用。如果anotherController.view對另一個控制器有unsafe_unretained引用,它將導致exc_bad_access。

無限遞歸:

EXC_BAD_ACCESS的另一個原因是無窮的recurssion,它可以通過添加一些日誌語句進行調試 - 它很快就會變得明顯了!

+1

謝謝,我會考慮這一點。同樣,如果你可以請上傳一個簡單的例子,它會有很長的路要走。 – mhamer13

+0

不錯 - 請提出另一個更具體的問題,如果你一路卡住了。 –

+0

@JasperBlues'Xcode:編輯該方案並選擇'Enabled Zombies'複選框 - 你如何做到這一點? – DeveloperACE

相關問題