Consider what you might do if you were creating, say, a UIView subclass programmatically.
In the subclass init method in some .m file, you might alloc a button.
Then you would assign that button to an instance variable in your inited object via some property setter.
Then you might add a method in that class file as the selector to handle that button's control event.
Interface builder is trying to save the information required for the runtime to do all of that for you in a compressed object representation (the xib file).
The SDK and/or preprocessor provides Interface Builder with a list of your specially marked instance variables and methods inside the .h and .m files.
The file owner tells IB which class name in your .m and .h files to look for and use for that xib file.
The IBOutlets that you drag tell the runtime which property assignments to make in that class.
The IBActions that you drag tell the runtime which selectors to set for various control actions in that class.