Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ViewController作为实例变量_Ios_Iphone_Objective C_Uiviewcontroller_Instance Variables - Fatal编程技术网

Ios ViewController作为实例变量

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

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

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

很明显,我只想alloc init我的实例变量一次,因为模态viewController不会在每次取消分配时取消分配,所以我的按钮操作中是否应该有这样的代码,以确保它只alloc和init一次

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语句,我只是