In Chapter 4, I talked about ways of obtaining an instance. You can directly instantiate an object type:
let v = UIView()
Or you can obtain a reference to an already existing instance:
let v = self.view.subviews
But there is a third way: you can load a nib. A nib is a file, in a special format, consisting of instructions for creating and configuring instances. To load a nib means, in effect, to tell that nib to follow those instructions: it does create and configure those instances.
My example of a UIView instance is apt, because a UIView is just the kind of instance a nib is likely to create. Nibs are edited in Xcode using a graphical interface, much like a drawing program. The idea is that you design some interface objects — mostly instances of UIView and UIView subclasses — that you want to use in your app when it runs. When your app does run, and when the moment comes where you actually need those interface objects — typically because you’re about to display them in your visible interface — you load the nib, the nib-loading process creates and configures the instances, and you receive the instances and insert them into your app’s interface; storyboards and view controllers can help to automate that process, but you can also do it manually, in code.
You do not have to use nibs to create your interface objects. The loading of a nib does nothing that you could not have done directly, in code. You can instantiate a UIView or UIView subclass, you can ...