我有一个自定义ViewController,它是我的根viewController的实例变量。
我打算在触摸按钮时以模态方式呈现它。因此,viewController可能会被多次呈现和解散。
我显然只想将init我的实例变量分配一次,因为模态viewController在每次被解除时都没有被释放,所以我应该在我的按钮操作中有这样的代码以确保它只有alloc和init一次吗?:
if(!myViewController)
{
ViewController *myViewController = [[ViewController alloc] init];
}
[self presentViewController:myViewController animated:YES completion:NULL];
答案 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
作为类变量。