We will go through a quick inventory of common design patterns that are used most extensively while working with iOS apps. The first design pattern we will look at is the two stage Object creation; it divides the process into separate memory allocation and initialization steps. This might appear cumbersome, but as we will see later, it allows greater flexibility in how we customize initialization methods. This facilitates code reuse both within classes and between classes in the inheritance hierarchy; then we will look at Singletons.
The Singleton pattern encapsulates a shared resource within a single unique class instance. This instance arbitrates access to the resource and storage-related state information. A class method provides the reference to this instance, so there is no need to pass the reference around; any object that has access to the Singleton's class header can use the Singleton. The following diagram briefly describes Singletons in action:

Next, we will look at key value coding or KVC and key value observing, aka KVO. KVC is a universal dictionary interface that uses keys and key paths for setting and accessing object properties. This interface opens the door to a number of powerful techniques, including KVO.
KVO allows the key coding interface to be used by one object to examine the property of a second object. The observing object is changed every time the property is modified. This allows the observer to respond to specific state conditions within other objects with minimal coupling. The observer only needs to know the simple key path. The diagram below briefly describes KVC in action:

NSNotifications work by having interested objects register for specific message types. When any instance posts a notification of that type, all the registered objects are notified. The system works something like a radio station broadcasting on a certain frequency; any radio tuned to that frequency can listen in. Like a radio station, the posting object has no idea how many, or if any, objects are listening and listeners don't know the source of any notification. The notification system allows for objects to pass signals between them with almost no coupling. Objects posting or listening have no information about other objects participating in the system. Notifications are an extreme example of decoupled communication. The following diagram briefly describes notifications in action:

Model view controller (MVC) is the most abstract pattern that we will be examining. It structures the relationship between objects that provide data and those that present information in a user interface. In MVC, classes are either the member of the model that manages application data or the view that manages the interface of the controller that acts as the mediator between the model and the view. This separation into three separate subsystems clarifies the roles and responsibilities of each and allows classes to be more specialized.
The given diagram briefly describes MVC in action:

In the coming sections, we will discuss each one of these design patterns in detail, starting with the Singleton design pattern.