我正在使用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 :(得分:0)
我猜你唯一可能会引用一些预先设定的值而不是对象,否则它会在看到代码后进行分析,如果你使用的是premitive,那么使用(id)值并试试这是否有效
另一个常见原因是被调用的对象已经从内存中释放出来。尝试使用NSZombieEnabled跟踪此内容
答案 1 :(得分:0)
作为参数传递给performSelector的对象在Release模式下被更积极地释放。你应该保留它以确保它在延迟后仍然在内存中(即使有0.0延迟!)。