Can someone explain class clusters to me? I feel like they might be an example of parent classes that reference their own children.
Well, sort of.
Class clusters are a bit odd.
A class cluster has a public interface that is fixed and fairly simple, and then some number of private subclasses that actually implement that public interface.
Class clusters allow the designer to create a class that can use a variety of different optimizations depending on how they are used at runtime.
Examples of class clusters are NSArray, NSDictionary, and NSString.
Take NSString as a simple example. if you pass in ASII data when you create a string, the system might analyze the data and decide that the internal storage should be purely 8-bit. If, however, you pass in non-roman data across a variety of different Unicode pages, the system might decide to use full-on 16 bit unicode for storage. If you're using a language like Swedish that's mostly Roman characters but with a fair number of accented characters, it might use a scheme like UTF8 internally that works well for MOSTLY roman characters.
Since the only part that's guaranteed is the public interface, the system can do whatever it wants internally at runtime to get the best performance and/or storage efficiency.
Mutable arrays are another good example of a class cluster. Depending on the type of data you put in an array and how you use it, the system might use a linked list, a b-tree, or an array of C pointers to represent the objects in the array. The system can even mutate the underlying object(s) to different private subclasses based on use.
You're right in that with a class cluster, the cluster is aware of the specifics of the private subclasses that it uses.
Normally a parent class doesn't (and shouldn't) know about the specifics of it's subclasses. The parent defines the base behavior, and the subclasses customize or extend that behavior.