【发布时间】:2010-10-24 01:12:28
【问题描述】:
我有一个重复的 NSTimer,在我释放拥有由计时器调用的回调的对象之前的一段时间,我手动使其无效。我验证当我使计时器无效时,不再调用回调。当对象解除分配时,稍后我得到一个 EXC_BAD_ACCESS。崩溃与我是否使计时器无效有关,即如果我不使计时器无效,则不会发生崩溃。
有谁知道为什么会发生这种情况?我不明白为什么计时器会尝试访问 dealloc'ed 对象的回调,这就是 似乎 正在发生的事情。我不知道如何进一步调试。调用堆栈只是说:
#0 0x02f05c93 in objc_msgSend
#1 0x00000001 in ??
#2 0x02d255fa in CFRunLoopRunSpecific
#3 0x02d248a8 in CFRunLoopRunInMode
#4 0x037de89d in GSEventRunModal
#5 0x037de962 in GSEventRun
#6 0x00863372 in UIApplicationMain
#7 0x00002e40 in main at main.m:13
更新:我已经确定它不是计时器,而是我的父对象调用 dealloc 导致的泄漏(非无效计时器阻止了 dealloc 调用)。当我用调用堆栈碰壁时,听到有关如何调试事物的建议仍然很有用,如果可能的话,所以我会留下这个问题。
【问题讨论】:
标签: memory-leaks nstimer