IBObject, IBOutlet & IBAction
Three aspects are provided on the Cocoa platform to mark code for interaction with Interface Builder, the visual UI designer in Xcode. You can read more about working with Interface Builder, and XIB and Storyboard files in the Working w/ XIBs & Storyboards and Editing Cocoa UI Files in Xcode topics.
IBObject aspect marks a class as exposed to Interface Builder, and also excludes it from name mangling, to ensure that the class can be found under its given name by the Objective-C runtime.
In general, every View Controller or Window Controller class should be marked with this attribute, and also any other class that you want to make connections to in Interface Builder (for example, your AppDelegate class, in a macOS application).
IBOutlet aspect marks a property as outlet, and lets it be hooked up to a visual control or other object in Interface Builder. In Swift, it also implies additional nullability constraints, in that the outlet must not be initialized in code, and can still be declared as non-nullable.
IBAction aspect marks a method to be available to connect actions to, in Interface Builder.
The IBObject, IBOutlet and IBAction aspects are available on the Cocoa platform only.