ViewController永远不会被释放

时间:2011-12-27 16:47:07

标签: iphone ios dealloc navigationcontroller

在我看来,myViewController应该在我使用以下代码回弹到根视图控制器的时候解除分配,但我从未看到取消分配消息获得NSLogged。

如果这应该有效,那么我可以在myViewController的类中找到什么样的问题,这可能会导致我在popToRootViewController时被解除分配?

感谢。

在我的tableView中调用以下内容:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];

[self.navigationController pushViewController:vc animated:YES];

[vc release];
}

更新:

这段代码很完美,但是我的自定义视图控制器中的一些糟糕的内存管理导致两者都没有被释放。我有一些应该被赋予的保留属性(或者至少,这就是我解决它的方式)。有关详细信息,请参阅注释。

2 个答案:

答案 0 :(得分:0)

当你使用poptoviewcontroller时,dealloc方法将调用导航控制器中最顶层的视图控制器。你可以在当前视图控制器的dealloc方法中放置一个断点,当你调用popviewcontroller时,你的dealloc方法会被调用并释放你在视图控制器中创建的所有东西/变量。

答案 1 :(得分:0)

@ JaySmith02是对的

  

我的自定义视图控制器中的一些不良内存管理导致两者都没有被释放。我有一些应该被赋予的保留属性(或者至少,这就是我解决它的方式)

就我而言,罪魁祸首是

@property (nonatomic, retain) id<TTSlidingPagesDataSource> dataSource;

我写的时候来自我的viewController

slidingPages.dataSource = self

我猜dataSource保留了我的viewController并进行了循环保留。我的viewController的'dealloc'从未被调用过。

  

注意:在ARC下dealloc会被调用。区别在于您无法拨打[super dealloc]

解决方案:

@property (nonatomic, assign) id<TTSlidingPagesDataSource> dataSource;