Categories are to add methods to classes whose source is unavailable to you, such as all the Apple classes (those starting with NS, CG, CA, etc.), without needing to subclass them.
The purpose of protocols is to define methods that classes adhering to that protocol have to implement. In Java, those are called interfaces. The purpose is to codify similarities between classes that are not siblings (subclasses of the same superclass). Suppose you have a class Chair
and a class Petrol
. These don't have a lot in common, except that they both adhere to the flammable
protocol, which requires them to have certain methods, such as specificEnergy
and flamingPoint
.
Now your Fire
class can have a method addFlammableMaterial:(id <flammable>)material
.
Protocols are often used to declare that instances of certain classes can be delegates for certain other instances. You can declare your view controller to act as the data source to a UITableView
by declaring it to conform to the UITableViewDataSource
protocol, which means your viewController guarantees that it implements the required methods of that protocol, and the tableView can rest safely because it can trust the VC to be its data source.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…