Frank Heckenbach wrote:
protocols (like Java/Delphi interfaces) correspond to abstract classes with only abstact virtual methods, implementing interfaces corresponds to (multiple) inheritance
In his book "Programming Language Pragmatics", Michael L.Scott distinguishes between multiple inheritance of specification and multiple inheritance of implementation.
Protocols provide multiple inheritance of specification but not multiple inheritance of implementation.
so the NSObject protocol would be the common ancestor, all classes implement (inherit from) it, and "id" would then be a pointer/reference to "NSObject_protocol".
The terminology for ancestor is superclass and root class (top level) and protocols are not classes, so they are not considered ancestors.
The terminology for implementing a protocol is "conform to" and you can send a "conformsTo:" message to a class asking it whether it conforms to a given protocol. Protocols can also conform to other protocols.