2012-05-02 176 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延迟!)。

相关问题