ViewControllers作为实例变量

时间:2013-11-08 11:56:44

标签: ios iphone objective-c uiviewcontroller instance-variables

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

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

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

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

2 个答案:

答案 0 :(得分:3)

我经常在这些情况下使用懒惰的实例:

为ViewController声明一个属性:

@property(nonatomic, strong) UIViewController *myViewController;

之后,您可以覆盖myViewController

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

    return _myViewController;
}

通过这种方式,您可以保证仅实例化一次,并且在您需要时始终存在。

<强>注意

如果您始终使用self.myViewController,这很有效。我认为一个好的做法是,属性'生成的iVars应该在其setter / getters中访问。

答案 1 :(得分:0)

您可以使用以下方法确保一次只激活一个视图控制器实例。

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

myViewController = [[ViewController alloc] init];  

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

您需要将myViewController作为类变量。