У меня есть повторяющийся NSTimer, который я аннулирую вручную некоторое время, прежде чем я освобождаю объект, которому принадлежит обратный вызов, который вызывается таймером. Я проверяю, что когда я аннулирую таймер, обратный вызов больше не вызывается. Когда объект освобождается, через мгновение я получаю EXC_BAD_ACCESS. Сбой коррелирует с тем, аннулирую ли я таймер или нет, т. е. если я его не аннулирую, сбоя не будет.
Кто-нибудь знает, почему это может происходить? Я не понимаю, почему таймер пытается получить доступ к обратному вызову для освобожденного объекта, что кажется и происходит. Я в недоумении, как отлаживать это дальше. Стек вызовов просто говорит:
#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). Тем не менее было бы полезно услышать совет о том, как отлаживать вещи, когда я упираюсь в стену со стеком вызовов, если это вообще возможно, поэтому я оставлю этот вопрос открытым.