查看控制器获取重复实例化

时间:2014-08-08 00:40:51

标签: ios objective-c uiviewcontroller

这应该是非常直接的。

当我使用导航控制器从我的根视图转到第二个视图时,第二个视图加载正常。 第二个视图在“viewDidLoad”中创建一个计时器,以定期调用方法“updateData”。

也许我不是在这里理解系统,但是当我回到root并再次转发到第二个视图时,我得到了一个全新的第二个视图控制器实例,它创建了一个新的计时器(updateData是被频繁调用两次。

这是不正确的默认行为吗?如何显示第二个视图控制器的第一个实例而不是创建一个新实例?

2 个答案:

答案 0 :(得分:1)

持久对象不应该是视图控制器的属性,这不一定是真的。您可以为第二个控制器(在根视图控制器中)创建一个属性,并且只在第一次推送它时才实例化它。因为你有一个强大的指针,当你回到第一个控制器时它不会被释放,你的计时器将继续运行。

- (IBAction)goToSecondView {
    if (!self.secondViewController) { // secondViewController is a strong property
        self.secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Second"]; 
    }
    [self.navigationController pushViewController:self.secondViewController animated:YES];
}

答案 1 :(得分:0)

脱离我的头脑:在你的第二个视图控制器deallocate方法中,你应该停止“updateData”的计时器,因为它没有被正确释放。试试吧!

[self.timer invalidate];