Previously we seen how to bind objects into methods dynamically
The Foundation framework introduces several paradigms to avoid confusion in common situations, and to introduce a level of consistency across class hierarchies. This consistency is done with some standard policies, such as that for object ownership (that is, who is responsible for disposing of objects), and with abstract classes like NSEnumerator. These new paradigms reduce the number of special and exceptional cases in an API and allow you to code more efficiently by reusing the same mechanisms with various kinds of objects.
Many of these classes have closely related functionality:
• Data storage : NSArray, NSDictionary, and NSSet provide storage for Objective-C objects of any class.
•Text and strings : NSCharacterSet represents various groupings of characters that are used by the NSString and NSScanner classes. The NSString classes represent text strings and provide methods for searching, combining, and comparing strings. An NSScanner object is used to scan numbers and words from an NSString object.
•Dates and times : The NSDate, NSTimeZone, and NSCalendar classes store times and dates and represent calendrical information. They offer methods for calculating date and time differences. Together with NSLocale, they provide methods for displaying dates and times in many formats and for adjusting times and dates based on location in the world.
·Exception handling : Exception handling is used to handle unexpected situations and it's offered in Objective-C with NSException.
·File handling : File handling is done with the help of class NSFileManager.
·URL loading system : A set of classes and protocols that provide access to common Internet protocols.
[Generally, we use Foundation classes something like: #import <Foundation/NSString.h> to import a Objective-C class, but in order avoid importing too many classes, it's all imported in #import <Foundation/Foundation.h>.]