Categories allow extending classes without subclassing by adding methods to existing classes. They are useful for spreading implementation across multiple files when working with others, fixing bugs in classes when you don't have access to the source code, and working with Cocoa class clusters that are difficult to subclass. However, categories can cause conflicts if two categories implement the same method, so they should be used carefully.