Objective-C has a very powerful and useful feature that many other languages miss: categories. It’s a good programming practice to keep the inheritance hierarchy as shallow as possible, since inheritance it introduces complexity when overriding methods. The common way to do this is to use composition (objects that use other objects) and leave inheritance to cases where it’s necessary. For example, instead of subclassing NSArray, it’s better to write a class that uses a NSArray instance internally. Objective-C though offers another alternative to composition through categories, that allow you to add methods to existing classes.