Categories:. Categories provide the ability to add functionality to an object without subclassing or modifying the actual object. A handy tool, they are often used to add methods to existing classes, such as NSString or your own custom objects.
Know more for category from here : categories in objective-c
Subclasses: Each object created in a Cocoa application is omitted from the NSObject foundation class. The NSObject class identifies properties and methods that apply to all objects. The NSObject class is divided into smaller groups of objects called subclasses. Objects in these subclasses not only comply with the NSObject protocol, but are also more precisely determined by the methods that control their subclass. Each class of objects is inherited from superclasses above it in the hierarchy of objects, and also declares methods that make it a unique class.
Know more for subclasses from here : Suclassing and SuperClassing
Notifications: A notification is a message sent to one or more monitoring objects to inform them of an event in the program. Cocoa's notification mechanism follows the broadcast model. This is a method for an object that triggers or processes a program event to communicate with any number of objects that want to know about this event. These notification recipients, known as observers, can adjust their appearance, behavior, and condition in response to an event. The entity sending (or publishing) the notification should not know what these observers are. Thus, notification is a powerful mechanism for achieving coordination and cohesion in a program. This reduces the need for strong dependencies between objects in the program (such dependencies will reduce the possibility of reusing these objects). Many Foundation, AppKit, and other Objective-C framework classes define notifications that your program can register for observation.
Know more for notifications from here : NSNotification Class Reference
Delegates: A delegate is an object that acts on behalf of or in coordination with another object when this object encounters an event in the program. A delegating object is often a responder object, that is, an object that inherits from NSResponder in AppKit or UIResponder in UIKit, which responds to a user event. A delegate is an object that delegates user interface control to this event, or at least is asked to interpret the event depending on the application. So, in principle, delegation is a way to allow objects to interact with each other without creating a strong interdependence between them, as this makes the design of your application less flexible. Instead of objects that control each other, they can have a delegate to whom they send (or delegate) messages, and the delegate does everything they do to respond to this message and act, and then usually return something back to another object .
Know more for delegates from here : Link to the application delegate class