应该在 init 方法中使用的代码类型(对象分配、设置 ui 元素、网络调用等)与视图控制器的 viewDidLoad 类型方法之间的区别的一般准则是什么?
1 回答
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 方法将再次被触发。