我正在从我的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]”,我们不会崩溃。
我无法进一步缩小范围。 “super”将是UIViewController类,我无法进一步研究这种处理方法......我可以吗?也许有办法看看0xd4f860到底指的是什么,但我不知道怎么回事?有什么想法吗?
答案 0 :(得分:4)
你看错了地方 - 问题是myViewController被释放(或自动释放)太多次了。
您发布的代码看起来是正确的,所以我会查看MyViewController的代码,看看它是否会自行释放,或以某种方式通过其他方式释放自己。
你也可以覆盖释放方法,设置一个断点,看看你是否可以缩小它...例如。
- (void)release {
[super release]; //Set breakpoint here
}