Interface Builder provides
palettes, or collections, of user interface objects to an
Objective-C or
Swift developer. These user interface objects contain items like text fields, data tables, sliders, and pop-up menus. Interface Builder's palettes are completely extensible, meaning any developer can develop new objects and add palettes to Interface Builder. To build an interface, a developer simply drags interface objects from the palette onto a window or menu.
Actions (messages) which the objects can emit are connected to
targets in the application's code and
outlets (pointers) declared in the application's code are connected to specific objects. In this way all initialization is done before runtime, both improving performance and streamlining the development process. When Interface Builder was a standalone application, interface designers could ship nib files to developers, who would then drop them into their projects. Interface Builder saves an application's interface as a
bundle that contains the interface objects and relationships used in the application. These objects are archived (a process also known as
serialization or
marshalling in other contexts) into either an
XML file or a NeXT-style
property list file with a extension. Upon running an application, the proper NIB objects are unarchived, connected into the binary of their owning application, and awakened. Unlike almost all other GUI designer systems which generate code to construct the UI (notable exceptions being
Glade,
Embarcadero Technologies's
Delphi and
C++Builder, which stream UI objects similarly), NIBs are often referred to as
freeze dried because they contain the archived objects themselves, ready to run. As of Interface Builder version 3, a new file format (with extension .xib) has been added, which is functionally identical to .nib, except it is stored in a flat file, making it more suitable for storage in
revision control systems and processing by tools such as
diff. ==References==