2012-05-02 220 views
0

我正在使用performSelector:withObject:afterDelay在我的應用程序中設置動畫。該應用程序在發佈時崩潰但未調試。崩潰日誌看起來是這樣的:performSelector:withObject:afterDelay在發佈但崩潰時崩潰應用程序

Exception Type: EXC_CRASH (SIGSEGV) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 1 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0: 
0 libobjc.A.dylib     0x35736e3e objc_release + 14 
1 stky       0x0010e096 -[OPLabel executeStrikethroughAnimationWithCompletion:] (OPLabel.m:142) 
2 Foundation      0x37a6992c __NSFireDelayedPerform + 408 
3 CoreFoundation     0x37207a2c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8 
4 CoreFoundation     0x37207692 __CFRunLoopDoTimer + 358 
5 CoreFoundation     0x37206268 __CFRunLoopRun + 1200 
6 CoreFoundation     0x3718949e CFRunLoopRunSpecific + 294 
7 CoreFoundation     0x37189366 CFRunLoopRunInMode + 98 
8 GraphicsServices    0x32096432 GSEventRunModal + 130 
9 UIKit       0x3390de76 UIApplicationMain + 1074 
10 stky       0x000f7224 main (main.m:16) 
11 stky       0x000f71d8 0xf6000 + 4568 

所以,據我所知,這是調用延遲方法都崩潰了應用程序的嘗試。但除此之外,我不確定問題是什麼,也不知道如何調試(因爲它不在調試模式下發生)。幫幫我?謝謝。

+0

你可以在這裏發佈你的部分代碼嗎? – Saad

回答

0

我猜你可以參考,而不是對象一些premitive值否則會看到代碼後進行分析,唯一的事情,如果你使用的是premitive一個然後使用(ID)值和嘗試,如果這個工程

另一種常見的因爲這是一個被調用的對象,已經從內存中釋放了。嘗試使用NSZombieEnabled來追蹤此內容

+0

謝謝。以下是有趣的內容:如果我清除延遲調用方法的主體,它仍然崩潰;換句話說,這似乎是導致問題的方法本身的行爲。我不明白這怎麼可能 - 根據Apple的文檔,當您調用performSelector:withObject:afterDelay時,對象會被保留。 –

0

作爲參數傳遞給performSelector的對象在釋放模式下被更激進地釋放。你應該保留它,以確保它在延遲之後仍然在內存中(即使是0.0延遲!)。

相關問題