iOS: What is the difference between -init and -viewLoad of a ViewController?

ios, uiviewcontroller

Solution

The `init` methods (yes there is more then one) are where the `UIViewController` is initialized. Thus this is the place where you do stuff for the `UIViewController` and not its views.

If you use a `nib` to load you view then the best place to set any properties is the `viewDidLoad` method. This method gets called after the `nib` is loaded. If you set up the view programatically use the `loadView` method then this is the place to set `UIControl` properties.

Since the system can unload views to save memory, it will leave the `UIViewController` alone. Any properties set in the `init` methode will not be applied again, since the `UIViewController` is already initialized.

Problem

I don't know exactly what's the right place to set things like the tintColor of the NavigationBar or the title of my ViewController. It works in the -init method and the -viewLoad method too. What is the "best-practice" or "right way" to do this? Has one of those any advantages?

Original source