在过去,我总是使用viewDidLoad
来初始化我的ViewControllers
,主要是为Apple's
文档建议的视图执行其他初始化。但有时候,我initialise
还会在viewDidLoad
中模拟帮助我完成某项任务的对象。这是一个示例代码:
override fun viewDidLoad()
{
super.viewDidLoad()
// Initialisation of my views
self.label.text = "text"
self.imageView.image = UIImage( named: "image" )
etc.
.
.
// Initialisation of my models
self.videoRecorder = VideoRecorder()
etc.
.
.
}
当我现在考虑它时,将模型初始化放在init
的{{1}}方法中是否更有意义?
如果我的问题显而易见,我会事先道歉,但我发现在我看过的大多数ViewController
教程中,人们往往只在iOS
方法中执行initialisation
。
非常感谢您的帮助。
答案 0 :(得分:3)
人们通常不这样做的原因是视图控制器经常从故事板和xib文件中实例化。在这种情况下,不会调用普通init
。而是使用initiWithCoder:
,然后相应地设置标有IBOutlet
的所有属性。
请注意,此非常通常会使初始化属性变得多余,因为它们也倾向于通过IBOutlet
设置。
因此,如果您希望视图控制器在与init一起使用时也能正常工作,请确保在从故事板中使用它时不会有麻烦(除非您绝对肯定永远不会发生),否则您最多可能必须同时实施init
和initWithCoder:
。我看到很多人遇到问题,因为他们希望init
中设置的属性设置在viewDidLoad
(从故事板加载控制器时)。
由于这一切,大多数程序员都不关心init
并依赖viewDidLoad
,因为这在某些时候肯定会被调用。编写一个合适的“双向可用”控制器只是更多的代码。
答案 1 :(得分:0)
通常不建议在构造函数(init()
)中执行任务。但是,创建一个ViewController
属性的对象可以被认为是一个简单的初始化,所以在init()
中进行它是可以的。
每个案例都应根据您创建的模型的性质及其职责单独考虑。
拇指规则是:执行任务 - 否,初始化属性 - 是。
答案 2 :(得分:0)
如果您使用从segue传入的数据初始化viewController变量,那么它(从我的个人经验)更好地在viewDidLoad而不是init中执行。当我尝试从init初始化时,viewController没有获得从segue传入的值。