Contents

NSSet

A static, unordered collection of unique objects.

Declaration

class NSSet

Mentioned in

Overview

The NSSet, NSMutableSet, and NSCountedSet classes declare the programmatic interface to an unordered collection of objects.

NSSet declares the programmatic interface for static sets of distinct objects. You establish a static set’s entries when it’s created, and can’t modify the entries after that. NSMutableSet, on the other hand, declares a programmatic interface for dynamic sets of distinct objects. A dynamic — or mutable — set allows the addition and deletion of entries at any time, automatically allocating memory as needed.

Use sets as an alternative to arrays when the order of elements isn’t important and you need to consider performance in testing whether the set contains an object. With an array, testing for membership is slower than with sets.

NSSet is “toll-free bridged” with its Core Foundation counterpart, CFSet. See Toll-Free Bridging for more information on toll-free bridging.

In Swift, use this class instead of a Set constant in cases where you require reference semantics.

Subclassing Notes

There should be little need of subclassing. If you need to customize behavior, it’s often better to consider composition instead of subclassing.

Methods to Override

In a subclass, you must override all of its primitive methods:

Alternatives to Subclassing

Before making a custom class of NSSet, investigate NSHashTable and the corresponding Core Foundation type, CFSet. Because NSSet and CFSet are “toll-free bridged,” you can substitute a CFSet object for a NSSet object in your code (with appropriate casting). Although they’re corresponding types, CFSet and NSSet don’t have identical interfaces or implementations, and you can sometimes do things with CFSet that you can’t easily do with NSSet.

If the behavior you want to add supplements that of the existing class, you could write a category on NSSet. Keep in mind, however, that this category affects all instances of NSSet that you use, and this might have unintended consequences. Alternatively, you could use composition to achieve the desired behavior.

Topics

Creating a Set

Initializing a Set

Counting Entries

Accessing Set Members

Comparing Sets

Creating a Sorted Array

Key-Value Observing

Describing a Set

Initializers

Instance Methods

Default Implementations