Ios viewDidLoad和viewDidAppear之间的差异

Ios viewDidLoad和viewDidAppear之间的差异,ios,Ios,viewDidLoad和viewDidAppear之间有什么区别?什么样的初始化或自定义代码进入这些函数 e、 g.presentModalViewController仅在出现在viewdideappear中时有效,而不在viewdideload上。简单地说,您需要在viewdideload中创建任何控件或数组,其中,viewdideappear是您想要刷新这些控件或数组的地方 viewDidLoad在创建控制器时被调用一次,并且每次视图出现时都被调用。因此,假设您有一个显示的模式视图,当该视图

viewDidLoad
viewDidAppear
之间有什么区别?什么样的初始化或自定义代码进入这些函数


e、 g.
presentModalViewController
仅在出现在
viewdideappear
中时有效,而不在
viewdideload
上。简单地说,您需要在
viewdideload
中创建任何控件或数组,其中,
viewdideappear
是您想要刷新这些控件或数组的地方


viewDidLoad
在创建控制器时被调用一次,并且每次视图出现时都被调用。因此,假设您有一个显示的模式视图,当该视图被取消时,
viewDidAppear
将被调用,而
viewDidLoad
将不会被调用。
viewDidLoad
在视图控制器首次加载到内存中时被精确调用一次。这是您想要实例化任何实例变量并构建在此视图控制器的整个生命周期中存在的任何视图的地方。但是,此时通常还看不到视图

viewdideappeage
在视图实际可见时调用,并且可以在视图控制器的生命周期内多次调用(例如,当模式视图控制器关闭且视图再次可见时)。这是您希望在UI中执行任何布局操作或绘制任何图形的位置-例如,显示模式视图控制器。然而,您在这里所做的任何事情都应该是可重复的。最好不要将内容保留在这里,否则如果视图消失时不释放它们,就会导致内存泄漏


请参阅:

您和WrightsCS完全正确。但是,不是为了吹毛求疵,而是当
viewDidLoad
通常只调用一次,而且只调用一次时,有一种情况可能会再次调用它。特别是,如果您收到一个
didReceiveMemoryWarning
,您的不可见视图可能会被释放(尽管视图控制器未被触动),并且当您返回时,
viewdiload
可能会再次调用它们。我不确定是否同意关于视图控制器IVAR始终自动为您发布的评论(控制器本身未发布)。我怀疑我们都可以很容易地构造一个viewDidLoad,如果在
didReceiveMemoryWarning
之后重新调用它,它就会泄漏。但我同意,如果您在编写
viewDidLoad
时采用了良好的做法,您应该会很好。我唯一的观点是,草率地使用IVAR和手动内存管理肯定会导致
viewDidLoad
中出现漏洞。人们应该对
didReceiveMemoryWarning
场景保持敏感,并相应地进行编程。我不是为了说明这一点,而是在交流后不到24小时,在回答时,我发现了一个例子,正好是
didReceiveMemoryWarning
会泄漏的
viewDidLoad
代码。唉,这个答案与另一个答案正好相反:我观察到我的viewDidLoad方法被调用了不止一次,即使根本没有收到内存警告。有人想澄清吗?我看不出有矛盾。这个问题是关于viewDidLoad和viewDidUnload之间的关系,而不是ViewDidDisplay。请看,第一段是一个很好的提示。但第二段是不正确的
viewDidLoad
可能会被多次调用。如果旧版本的iOS在内存不足的情况下卸载了未显示的视图(在其他视图堆栈下),则视图控制器将在需要在屏幕上重新显示时自动重新加载视图。在更高版本的iOS中,您可以选择通过执行早期iOS为您所做的操作来帮助减少内存使用量:当
direceivememorywarning
消息到达时卸载屏幕外视图,在这种情况下,将再次调用
viewDidLoad
。@WrightsCS您有任何官方的apple文档说明这一点吗?“创建控制器时调用viewDidLoad一次”,因为我记得在过去,在内存不足的情况下,viewDidLoad可能会被调用多次。谢谢。