A collection is a Foundation framework object whose primary role is to store objects in the form of arrays, dictionaries, and sets.
The primary classes—
NSDictionary—share a number of features in common:
They can hold only objects, but the objects can be of any type. An instance of
NSArray, for example, could contain cats, dogs, or wombats, or any combination of these.
They maintain strong references to their contents.
They are immutable, but have a mutable subclass that allows you to change the contents of the collection.
You can iterate over their contents using
NSEnumeratoror fast enumeration.
Cocoa also provides three classes—
NSMapTable—that are modeled on these classes but that differ in the following ways:
They may contain elements other than objects.
They offer other memory management options.
They are mutable.
Since a Cocoa collection object can hold any sort of object (unlike collections in some other environments), you typically don’t create special collection classes to contain objects of a particular type.
Collections store and vend other objects in a particular ordering scheme:
NSArrayand its mutable subclass
NSMutableArrayuse zero-based indexing.
In other environments, an array may be called a vector, table, or list.
NSPointerArrayis modeled after
NSMutableArray, but it can also hold
NULLvalues (which contribute to the object’s count). You can also set the count of the pointer array directly (something you can’t do in a traditional array).
NSDictionaryand its mutable subclass
NSMutableDictionaryuse key-value pairs.
In other environments, a dictionary may be referred to as a hash table or hash map.
NSMapTableis modeled after
NSMutableDictionarybut provides different options, in particular to support weak relationships in a garbage-collected environment.
NSSetand its mutable subclass
NSMutableSetprovide unordered storage of objects.
Cocoa also provides
NSCountedSet, which is a subclass of
NSMutableSetand which keeps a count of how many times each object has been added to the set.
NSHashTableis modeled after
NSMutableSetbut provides different options, mostly to support weak relationships in a garbage-collected environment.