Ios ViewController作为实例变量
我有一个自定义ViewController,它是我的根ViewController的一个实例变量 我打算在触摸按钮时以模态方式呈现它。因此,viewController可能会多次出现和消失 很明显,我只想alloc init我的实例变量一次,因为模态viewController不会在每次取消分配时取消分配,所以我的按钮操作中是否应该有这样的代码,以确保它只alloc和init一次Ios ViewController作为实例变量,ios,iphone,objective-c,uiviewcontroller,instance-variables,Ios,Iphone,Objective C,Uiviewcontroller,Instance Variables,我有一个自定义ViewController,它是我的根ViewController的一个实例变量 我打算在触摸按钮时以模态方式呈现它。因此,viewController可能会多次出现和消失 很明显,我只想alloc init我的实例变量一次,因为模态viewController不会在每次取消分配时取消分配,所以我的按钮操作中是否应该有这样的代码,以确保它只alloc和init一次 if(!myViewController) { ViewController *myViewControll
if(!myViewController)
{
ViewController *myViewController = [[ViewController alloc] init];
}
[self presentViewController:myViewController animated:YES completion:NULL];
在这些情况下,我通常使用lazy Instantiation: 声明ViewController的属性:
@property(nonatomic, strong) UIViewController *myViewController;
之后,您可以覆盖myViewController
-(UIViewController*) myViewController {
if(!_myViewController) {
_myViewController = [[UIViewController alloc] init];
}
return _myViewController;
}
这样,您可以保证只实例化一次,并且在需要时始终存在
注意
如果总是使用
self.myViewController
,这将非常有效。我认为一个好的做法是,属性生成的IVAR应该<强>只有< /强>在它们的设置器/吸收器中被访问。 在这些情况下,我通常使用惰性安装:
声明ViewController的属性:
@property(nonatomic, strong) UIViewController *myViewController;
之后,您可以覆盖myViewController
-(UIViewController*) myViewController {
if(!_myViewController) {
_myViewController = [[UIViewController alloc] init];
}
return _myViewController;
}
这样,您可以保证只实例化一次,并且在需要时始终存在
注意
如果总是使用
self.myViewController
,这将非常有效。我认为一个好的做法是,属性生成的IVAR应该<强>只有< /强>在它们的设置器/吸收器中被访问。 在这些情况下,我通常使用惰性安装:
声明ViewController的属性:
@property(nonatomic, strong) UIViewController *myViewController;
之后,您可以覆盖myViewController
-(UIViewController*) myViewController {
if(!_myViewController) {
_myViewController = [[UIViewController alloc] init];
}
return _myViewController;
}
这样,您可以保证只实例化一次,并且在需要时始终存在
注意
如果总是使用
self.myViewController
,这将非常有效。我认为一个好的做法是,属性生成的IVAR应该<强>只有< /强>在它们的设置器/吸收器中被访问。 在这些情况下,我通常使用惰性安装:
声明ViewController的属性:
@property(nonatomic, strong) UIViewController *myViewController;
之后,您可以覆盖myViewController
-(UIViewController*) myViewController {
if(!_myViewController) {
_myViewController = [[UIViewController alloc] init];
}
return _myViewController;
}
这样,您可以保证只实例化一次,并且在需要时始终存在
注意
如果总是使用
self.myViewController
,这将非常有效。我认为一个好的做法是,属性生成的IVAR应该<强>只有< /强>在它们的设置器/吸收器中被访问。 可以使用以下方法确保一次只有一个视图控制器实例处于活动状态
if(myViewController) {
[myViewController release];
myViewController = nil;
}
myViewController = [[ViewController alloc] init];
[self presentViewController:myViewController animated:YES completion:NULL];
您需要将
myViewController
设置为类变量。您可以使用以下方法确保一次只有一个视图控制器实例处于活动状态
if(myViewController) {
[myViewController release];
myViewController = nil;
}
myViewController = [[ViewController alloc] init];
[self presentViewController:myViewController animated:YES completion:NULL];
您需要将
myViewController
设置为类变量。您可以使用以下方法确保一次只有一个视图控制器实例处于活动状态
if(myViewController) {
[myViewController release];
myViewController = nil;
}
myViewController = [[ViewController alloc] init];
[self presentViewController:myViewController animated:YES completion:NULL];
您需要将
myViewController
设置为类变量。您可以使用以下方法确保一次只有一个视图控制器实例处于活动状态
if(myViewController) {
[myViewController release];
myViewController = nil;
}
myViewController = [[ViewController alloc] init];
[self presentViewController:myViewController animated:YES completion:NULL];
您需要将
myViewController
作为类变量。然后您需要使用“self.myViewController”来使用getter!我认为这很明显,但你是对的。我刚刚加了那张便条。谢谢你,杰拉德。ch@TiagoAlmeida谢谢,所以在rootView控制器中我没有If语句,我总是alloc init,对吗?然后,模态视图控制器的init方法确定自身是否已经创建?@JohnWoods在rootViewController
中,您只需使用myViewController
调用self.myViewController
。将要发生的是:在需要时调用self.myViewController
,然后将调用get(-(UIViewController*)myViewController
)。然后它检查“myViewController是否已创建?”如果不是,它将alloc init,否则它将不执行任何操作。然后您需要使用“self.myViewController”来使用getter!我认为这很明显,但你是对的。我刚刚加了那张便条。谢谢你,杰拉德。ch@TiagoAlmeida谢谢,所以在rootView控制器中我没有If语句,我总是alloc init,对吗?然后,模态视图控制器的init方法确定自身是否已经创建?@JohnWoods在rootViewController
中,您只需使用myViewController
调用self.myViewController
。将要发生的是:在需要时调用self.myViewController
,然后将调用get(-(UIViewController*)myViewController
)。然后它检查“myViewController是否已创建?”如果不是,它将alloc init,否则它将不执行任何操作。然后您需要使用“self.myViewController”来使用getter!我认为这很明显,但你是对的。我刚刚加了那张便条。谢谢你,杰拉德。ch@TiagoAlmeida谢谢,所以在rootView控制器中我没有If语句,我总是alloc init,对吗?然后,模态视图控制器的init方法确定自身是否已经创建?@JohnWoods在rootViewController
中,您只需使用myViewController
调用self.myViewController
。将要发生的是:在需要时调用self.myViewController
,然后将调用get(-(UIViewController*)myViewController
)。然后它检查“myViewController是否已创建?”如果不是,它将alloc init,否则它将不执行任何操作。然后您需要使用“self.myViewController”来使用getter!我认为这很明显,但你是对的。我刚刚加了那张便条。谢谢你,杰拉德。ch@TiagoAlmeida谢谢,所以在rootView控制器中我没有If语句,我只是