To be more clear, an implementation of class B -doingSomething will be called instead of an implementation of class A simply because class B inherits from class A and never calls a super-implementation.
If you want to call the implementation from within B, you would add [super doingSomething] to the line inside the B -doingSomething method.
As mentioned in the previous answer, the fact that -doingSomething is declared in the protocol is completely irrelevant, since the protocols simply exist to provide compile-time information of what the class is capable of doing, for the developer’s own benefit.
source share