У меня есть родительский контроллер табличного представления со свойством контроллера подробного представления только для чтения, которое лениво создает экземпляр контроллера подробного представления. Если я нахожусь на iphone/ipod, я настраиваю и нажимаю контроллер подробного представления, когда выбирается элемент в таблице. Когда вид подробностей виден, и я дважды щелкаю назад в контроллере навигации, контроллер деталей, а затем родительский контроллер выталкиваются, и вызывается родительская Dealloc. Когда Dealloc родителя достигает строки, где я вызываю [detailViewController release], я получаю сбой с EXC_BAD_ACCESS от навигационного контроллера. Это наводит меня на мысль, что моя проблема связана с управлением памятью в detailViewController, но отладка с помощью NSZombies не выявила проблем. (Комментирование строки [detailViewController release] устраняет сбой, но тогда у меня никогда не будет выпуска, чтобы сбалансировать выделение памяти в detailViewController -- утечка памяти) Есть идеи, почему я получаю этот сбой?
РЕДАКТИРОВАТЬ: вот трассировка стека для сбоя:
Program received signal: “EXC_BAD_ACCESS”.
(gdb) bt
#0 0x01046a63 in objc_msgSend ()
#1 0x0a9d72a0 in ?? ()
#2 0x0000cb4c in -[MyTableViewController dealloc] (self=0xa956840, _cmd=0x127a9d6) at /Users/nick/Documents/MyApp/Classes/MyTableViewController.m:290
#3 0x00390f1d in -[UINavigationController setDisappearingViewController:] ()
#4 0x0038e4f6 in -[UINavigationController _clearLastOperation] ()
#5 0x0038ee3f in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] ()
#6 0x0051be23 in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] ()
#7 0x0051cfd2 in -[UINavigationTransitionView _cleanupTransition] ()
#8 0x00308665 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] ()
#9 0x003084f7 in -[UIViewAnimationState animationDidStop:finished:] ()
#10 0x0200c6cb in run_animation_callbacks ()
#11 0x0200c589 in CA::timer_callback ()
#12 0x01225fe3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#13 0x01227594 in __CFRunLoopDoTimer ()
#14 0x01183cc9 in __CFRunLoopRun ()
#15 0x01183240 in CFRunLoopRunSpecific ()
#16 0x01183161 in CFRunLoopRunInMode ()
#17 0x01a5a268 in GSEventRunModal ()
#18 0x01a5a32d in GSEventRun ()
#19 0x002e642e in UIApplicationMain ()
#20 0x00001b28 in main (argc=1, argv=0xbffff070) at /Users/nick/Documents/MyApp/main.m:14
EDIT2: метод Dealloc, при котором происходит сбой:
- (void)dealloc
{
[context release]; // a managed object context -- when table entries are selected, they get cached in core data
[tableDataArray release];
[detailViewController release]; // <-- line 290, this is where it crashes
[super dealloc];
}