我从 TableViewController 的 didSelectRowAtIndexPath 方法中将视图控制器推送到导航控制器的堆栈上,如下所示:
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
MyObject *myO = (MyObject *)[appDelegate.myOs objectAtIndex:indexPath.row];
myViewController.amount = myO.amount;
[self.navigationController pushViewController:myViewController animated:YES];
[myViewController release];
如果我取消注释最后一行,则应用程序在返回时崩溃并出现错误:
-[CALayer release]: message sent to deallocated instance 0xd4f860
再深入一点,我发现崩溃可以进一步缩小到 MyViewController 的 dealoc 方法中对 [super dealoc] 的调用。通过取消注释“[super dealoc]”我们不会崩溃。
我无法进一步缩小范围。“超级”将是 UIViewController 类,我无法进一步调查该 dealoc 方法......可以吗?也许有一种方法可以查看 0xd4f860 究竟指向什么,但我不知道如何?有任何想法吗?