The Foundation Kit, or just Foundation for short, is a framework specified under the OpenStep specification.
Foundation specifies device independent classes and programming functionality. There are several classes specified by Foundation, these are: (outlining represents inheritance structure)
NSObject
NSArray
NSMutableArray
NSAssertionHandler
NSAttributedString
NSMutableAttributedString
NSAutoreleasePool
NSBundle
NSCharacterSet
NSCoder
NSArchiver
NSUnarchiver
NSPortCoder
NSConditionLock
NSConnection
NSCountedSet
NSData
NSMutableData
NSDate
NSCalendarDate
NSDeserializer
NSDictionary
NSMutableDictionary
NSDistributedLock
NSEnumerator
NSDictionaryEnumerator
NSFileHandle
NSFileManager
NSFormatter
NSException
NSFormatter
NSDateFormatter
NSNumberFormatter
NSHost
NSInvocation
NSLock
NSNotification
NSNotificationCenter
NSNotificationQueue
NSPipe
NSPPL
NSPort
NSPortMessage
NSPortNameServer
NSPosixFileDescriptor
NSProtocolChecker
NSRecursiveLock
NSRunLoop
NSScanner
NSSerializer
NSSet
NSMutableSet
NSCountableSet
NSString
NSMutableString
NSTask
NSThread
NSTimer
NSTimeZone
NSTimeZoneDetail
NSUserDefaults
NSValue
NSNumber
NSDecimalNumber
NSProxy
NSDistantObject
Some of these classes specify data structures, for example NSSet, NSString, NSNumber, however others specify general functionality provided by any modern programming languages, such as NSTimer, NSException, and so on.
Mutable datatypes represent stored data which can be changed, while non-mutable datatypes can not be changed after they are set.
The FoundationKit includes the root object class, classes representing basic data types such as strings and byte arrays, and collections of other objects, and classes representing system information such as dates and communication ports between applications.
The FoundationKit introduces several paradigms to avoid confusion in common situations, and to introduce a level of consistency across class hierarchies.
The FoundationKit's ownership policy limits itself to the question of when you have to dispose of an object; it doesn't specify that any object received in a method must remain valid throughout that method's scope.