In OpenStep (and deriving technologies such as GNUStep and Cocoa), a delegate is an object that acts in behalf of another object. They're typically used to implement things that respond to various kinds of user or system signals.

A typical example found in many programs is the application delegate. You can create a new class, for example, MyAppDelegate, and set it as the application's delegate with [NSApp setDelegate: [MyAppDelegate new]];. Now, you can implement methods to MyAppDelegate that respond to NSApplication's messages - for example, if you need to do something when the application starts up, you can implement the method - (void)applicationDidFinishLaunching: (NSNotification *)not; in the delegate class.

Another typical example is the window delegate. Likewise by using NSWindow's setDelegate: method (or setting the delegate in the interface builder of your choice), you can implement a class that responds to window signals. For example, windowShouldClose: method would be called to determine whether or not the window can be closed.