Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.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
Iphone 为什么viewDidLoad中初始化的变量在Objective-C中不保留值?_Iphone_Objective C_Retain - Fatal编程技术网

Iphone 为什么viewDidLoad中初始化的变量在Objective-C中不保留值?

Iphone 为什么viewDidLoad中初始化的变量在Objective-C中不保留值?,iphone,objective-c,retain,Iphone,Objective C,Retain,我编写了一个名为Location的类,它只包含一些字符串。我在一个视图控制器中使用了该类的两个实例,当我在viewDidLoad中初始化这两个变量时,它们对于该方法来说工作得很好,但是当我稍后尝试使用它们时,它们是空的。我将它们设置为保留属性。我已经对它们进行了测试,知道它们是为viewDidLoad初始化的(我在视图中使用它们的字段)。我需要在Location类中做一些特殊的事情来确保它们不会被释放吗?当我用另一种方法重新初始化它们时,一切都会顺利进行。在viewDidLoad中正确初始化的实

我编写了一个名为Location的类,它只包含一些字符串。我在一个视图控制器中使用了该类的两个实例,当我在viewDidLoad中初始化这两个变量时,它们对于该方法来说工作得很好,但是当我稍后尝试使用它们时,它们是空的。我将它们设置为保留属性。我已经对它们进行了测试,知道它们是为viewDidLoad初始化的(我在视图中使用它们的字段)。我需要在Location类中做一些特殊的事情来确保它们不会被释放吗?当我用另一种方法重新初始化它们时,一切都会顺利进行。

在viewDidLoad中正确初始化的实例变量应该像在任何其他方法中一样正常保留值。编码错误可能会导致您正在描述的问题,例如,如果viewDidLoad中有本地变量隐藏同名实例变量

您(或事件循环)可能正在释放viewDidLoad完成后正在初始化的对象,因为它们是自动释放的。为了防止出现这种情况,请在类上使用“retain”属性设置有问题的变量属性,并在dealloc上将它们设置为nil。

什么是“以后”?您能给出一个实际的例子吗?您是否使用self.variableName=。。。?如果没有,就这样做。但即使它们“提前”发布,也很难理解为什么它们会被设置为空。是否在viewDidUnload方法中清除它们?因为它可以在视图不可见的任何时候调用。之所以有效,是因为
@property(retain)
实际上只是生成的getter和setter的简写。您可能将自动释放的对象分配给实例变量。通过属性设置它将保留其值。这不会导致它们变为零。