在我的应用程序中,我有三个UIViewController
个对象。
V1 - > V2 - > V3
当我从V2移动到V3时,我使用push并使用pop从V3到V2。但不知何故,V3的对象仍被保留。
我认为当我们弹出时,会删除堆栈中的所有对象 - V3对象。但是,在这种情况下不会发生这种情况。
有人可以建议如何解决此问题吗?
由于
答案 0 :(得分:1)
V3 *v3 = [[[V3 alloc] initWithNibName:@"V3" bundle:nil] autorelease];
[self.navigationController pushViewController: v3 animated:YES];
这是在导航栏中推送控制器的标准方法..
要么你错过了v3上的autorelease或release,要么你将它保留在其他地方..
答案 1 :(得分:0)
正如您使用导航控制器推动视图控制器一样,在下面添加一行以释放它。
向我们展示一些您正在做的事情的代码。然后我们可以准确地告诉你。
答案 2 :(得分:0)
除了Shubhank所说的,请确保在UIViewController本身内平衡这些方法中的保留和释放:
viewDidLoad
& viewDidUnload
viewWillAppear:
& viewWillDisappear:
还要确保在dealloc方法中释放任何带有“retain”或“copy”属性的属性。
只要您在dealloc中正确清理所有内容,并且UIViewController本身的保留/释放计数是平衡的(请参阅Shubhank的回答),您将没有问题,所有内容都将按预期发布。
答案 3 :(得分:-1)
当您使用导航推送时,它将调用下一个视图的方法
- (void)viewDidLoad{
}
当你回到之前的视图时,只会调用
- (void)viewWillAppear:(BOOL)animated{
}
现在,当您使用pop导航回来然后它没有调用您的viewDidLoad
时会发生什么事情,因此您的NSMutableArray
以及您在该视图中分配的任何对象都不会被分配.. < / p>