gpt4 book ai didi

iphone - 为什么会出现过度释放呢? UINavigationController/UITableview

转载 作者:行者123 更新时间:2023-12-03 18:30:56 24 4
gpt4 key购买 nike

我从 TableViewController 的 didSelectRowAtIndexPath 方法中将 View Controller 推送到导航 Controller 的堆栈上,如下所示:

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 类,我无法进一步调查那个 dealoc 方法......可以吗?也许有一种方法可以查看 0xd4f860 到底指向什么,但我不知道如何?有什么想法吗?

最佳答案

您找错地方了——问题是 myViewController 被释放(或自动释放)的次数太多了。

您发布的代码看起来是正确的,因此我会查看 MyViewController 的代码,看看它是否释放了自身,或者以某种方式导致自身通过其他方式释放。

您还可以覆盖释放方法,设置一个断点,看看是否可以通过这种方式缩小范围......例如

- (void)release {
[super release]; //Set breakpoint here
}

关于iphone - 为什么会出现过度释放呢? UINavigationController/UITableview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1167400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com