3

应该在 init 方法中使用的代码类型(对象分配、设置 ui 元素、网络调用等)与视图控制器的 viewDidLoad 类型方法之间的区别的一般准则是什么?

4

1 回答 1

10

Init =>调用/用于初始化您的 ViewController 和 Initialize 仅用于 UIViewController而不是它的视图

ViewDidLoad => call at/use for load view ,这个方法在 nib 加载后调用

系统可以卸载视图以节省内存,它将单独保留 UIViewController。init 方法中设置的任何属性都不会再次应用,因为 UIViewController 已经初始化

在 iOS 应用程序中初始化变量是每个项目都会面临的问题。选择正确的位置来初始化变量有时会很棘手。我最近遇到了一个难以重现的问题,并更改了一些在我的 viewDidLoad 方法中初始化的变量,并且我无法理解它们正在改变。

在视图控制器中初始化变量的可能方法是: - init - viewDidLoad - viewWillAppear - viewDidAppear

为了解释我的观点,我使用模板标签栏应用程序开始了一个新项目。我在两个视图控制器的 viewDidLoad 方法中添加了日志语句。A 还向第二个视图控制器添加了一个按钮,该按钮将初始化一些会给我一个内存警告的图像。

在记录了一些语句并得出以下结论:

15:11:40.077 testblog2[4865:707] FirstViewController viewdidload
15:11:56.720 testblog2[4865:707] SecondViewController viewDidLoad
15:12:05.710 testblog2[4865:707] Pressed loading images button
15:12:19.025 testblog2[4865:707] Received memory warning. Level=1
15:12:21.272 testblog2[4865:707] SecondViewController didReceiveMemoryWarning

=> 现在切换到第一个选项卡

15:12:30.822 testblog2[4865:707] FirstViewController viewdidload

如果您在 viewDidLoad 方法中初始化变量,请记住这些变量可能会在收到内存警告后重新初始化。Cocoa 将删除该视图,并且一旦您转到该特定视图控制器,您的 viewDidLoad 方法将再次被触发。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926

于 2013-02-06T05:37:53.833 回答