Your understanding is correct, but incomplete. Yes, Interface Builder instantiates classes and serializes them into NIB. However, these objects are not automatically available for your code.
For each IB object that you want to access through Xcode, you need to declare an IBOutlet variable. Example:
IBOutlet NSWindow* mainWindow;
Put this code in the header file of the user object that you create through the Builder interface (drag the general object into the list of classes, and then on the Identification tab of the inspector set the special object as an instance of your class). Then right-click on your custom object in Interface Builder. You should see the entry for your IBOutlet in the window that appears. Drag from the small circle next to it in (in this example) the main window. You now have a reference to the IB object in Xcode.
It is thanks to these connections (with IBOutlets for links and IBActions for methods) that you determine most of the behavior of your application.
source share