A method cannot override a method declared in another category of the same class. A category cannot add data fields to a class. The data fields are all visible within the category, including private ones. Protocols on the other hand declare methods that are not associated to any class in particular, but which any class can implement, and perhaps many classes. A protocol is a list of method declarations.
Any class can adopt a protocol and implement the methods the protocol declares.
Note that it doesn't make any sense to declare a method in a protocol with the class or override attribute. There is no ambiguity using protocol both in a type declaration and as a variable s type definition because anonymous protocol declarations are not allowed. This is suitable to break cicular references between declarations. A class or category adopting a protocol must have this protocol s declaration visible either via a uses or a declaration in the that unit. The adoption of a protocol by a class or category forces it to define all methods declared by the protocol.