我有一个定制的viewController,它是根ViewController的一个实例变量。
每当按下按钮时,我都会以模态方式呈现它。因此,viewController可能会被多次提交和驳回。
显然,我只想分配一次init实例变量,因为每次取消模态viewController时都不会取消它,所以应该在按钮操作中使用这样的代码来确保它只分配一次吗?:
if(!myViewController)
{
ViewController *myViewController = [[ViewController alloc] init];
}
[self presentViewController:myViewController animated:YES completion:NULL];
发布于 2013-11-08 04:09:41
在这些情况下,我通常使用惰性实例:
为ViewController声明一个属性:
@property(nonatomic, strong) UIViewController *myViewController;
之后,您可以重写myViewController
的get
-(UIViewController*) myViewController {
if(!_myViewController) {
_myViewController = [[UIViewController alloc] init];
}
return _myViewController;
}
通过这种方式,您可以保证只实例化一次,并且在需要时始终存在。
注意
如果您总是使用self.myViewController
,这将很好地工作。我认为一个很好的实践是,属性生成的iVars应该只在/getter中访问。
发布于 2013-11-08 04:18:01
可以使用以下方法确保每次只激活视图控制器的一个实例。
if(myViewController) {
[myViewController release];
myViewController = nil;
}
myViewController = [[ViewController alloc] init];
[self presentViewController:myViewController animated:YES completion:NULL];
您需要将myViewController
作为类变量。
https://stackoverflow.com/questions/19858570
复制