performSelector:withObject:afterDelay在发布时崩溃应用程序而不是调试

时间:2012-05-02 19:10:49

标签: iphone ios debugging

我正在使用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

据我所知,这是尝试调用崩溃应用程序的延迟方法。但除此之外,我不确定问题是什么,也不知道如何调试(因为它不会在调试模式下发生)。救命?感谢。

2 个答案:

答案 0 :(得分:0)

我猜你唯一可能会引用一些预先设定的值而不是对象,否则它会在看到代码后进行分析,如果你使用的是premitive,那么使用(id)值并试试这是否有效

另一个常见原因是被调用的对象已经从内存中释放出来。尝试使用NSZombieEnabled跟踪此内容

答案 1 :(得分:0)

作为参数传递给performSelector的对象在Release模式下被更积极地释放。你应该保留它以确保它在延迟后仍然在内存中(即使有0.0延迟!)。