0

我有一个自定义 ViewController,它是我的根 viewController 的一个实例变量。

我打算在触摸按钮时以模态方式呈现它。因此 viewController 可能会被多次展示和关闭。

我显然只想分配初始化我的实例变量一次,因为模式 viewController 每次被解除时都不会被释放,所以我应该在我的按钮操作中有这样的代码以确保它只分配和初始化一次吗?:

if(!myViewController)
{
    ViewController *myViewController = [[ViewController alloc] init];  
}
[self presentViewController:myViewController animated:YES completion:NULL];
4

2 回答 2

3

在这些情况下,我通常使用惰性实例化:

为您的 ViewController 声明一个属性:

@property(nonatomic, strong) UIViewController *myViewController;

之后,您可以覆盖myViewController

-(UIViewController*) myViewController {
    if(!_myViewController) {
        _myViewController = [[UIViewController alloc] init];
    }

    return _myViewController;
}

这样你就可以保证它只被实例化一次,并且在你需要的时候总是在那里。

注意力

如果您总是使用self.myViewController. 我认为一个好的做法是属性生成的 iVar只能在它们的 setter/getter 中访问。

于 2013-11-08T12:09:41.540 回答
0

您可以使用以下方式来确保一次只有一个视图控制器实例处于活动状态。

if(myViewController) {
  [myViewController release];
   myViewController = nil;
}

myViewController = [[ViewController alloc] init];  

[self presentViewController:myViewController animated:YES completion:NULL];

您需要制作myViewController为类变量。

于 2013-11-08T12:18:01.853 回答