0

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

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

4

2 回答 2

0

唯一我猜你可能会引用一些 premitive 值而不是 object 否则它将在查看代码后进行分析,如果你使用的是 premitive 则使用 (id)value 并尝试这是否有效

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

于 2012-05-02T19:17:20.110 回答
0

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

于 2012-09-05T08:39:13.237 回答