Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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开发人员-在init或viewDidLoad中创建数组_Iphone_Objective C_Nsarray_Where_Initialization - Fatal编程技术网

iPhone开发人员-在init或viewDidLoad中创建数组

iPhone开发人员-在init或viewDidLoad中创建数组,iphone,objective-c,nsarray,where,initialization,Iphone,Objective C,Nsarray,Where,Initialization,在UIViewController子类中,我应该在init或viewDidLoad中初始化UIPickerView的NSArray数据,为什么?谢谢。这完全取决于您希望阵列存储什么以及如何初始化它viewDidLoad可以多次调用(特别是在向程序发送内存不足警告后-非活动视图控制器将卸载其视图,然后在视图再次变为活动或可见时重新加载),而init通常在对象的生命周期内只调用一次。我会在viewDidLoad中调用它,因为视图可以多次加载(也可以卸载,因此您可能还需要重新加载数组) 另外,大部分时

在UIViewController子类中,我应该在init或viewDidLoad中初始化UIPickerView的NSArray数据,为什么?谢谢。

这完全取决于您希望阵列存储什么以及如何初始化它
viewDidLoad
可以多次调用(特别是在向程序发送内存不足警告后-非活动视图控制器将卸载其视图,然后在视图再次变为活动或可见时重新加载),而
init
通常在对象的生命周期内只调用一次。

我会在
viewDidLoad
中调用它,因为视图可以多次加载(也可以卸载,因此您可能还需要重新加载数组)


另外,大部分时间在iPhone上懒洋洋地加载数据也是个好主意。在
viewdiload
中加载数据比在
init
中加载数据要慢得多,如果您使用init,结果可能会更好,但不要立即使用视图控制器。

在init中这样做的一种情况是,可以在viewdiload出现后调用viewdiload。如果您依赖于当时存在的数组,则可能需要将初始化放在init中


一般来说,只要记住可以多次调用viewDidLoad,viewDidLoad是一个非常好的地方。

好的,这是有道理的,但是您能告诉我什么时候调用viewDidLoad吗?我知道,当视图已卸载时,但何时会自动发生?如何手动卸载?当收到内存警告时,UIViewController将卸载视图,此时将调用viewDidUnload。如果确实在viewDidLoad中创建了数组,则必须确保在viewDidUnload中销毁它。您还必须确保,如果视图不可见,则永远不会访问它(如果视图可见,则永远不会卸载视图)。如果您确实需要访问它(例如,更新它),即使您的视图不可见,我建议您在init中创建它。Apple建议仅对可以轻松重新创建的对象使用viewDidLoad。在init中创建viewDidLoad的另一种方法是将数组定义为属性,并在首次访问数组时延迟创建数组。最终结果与init方法相同,但如果您从未访问该数组,它将不会使用内存。