Objective-C method overriding/overloading confusion
===

There seems to be some debate/disagreement on whether it is possible to 'overload' methods in Objective-C. Putting aside that it is impossible to define method overloading in Objective-C is terms equal to those of C++ (because of method signature syntax differences), I would ask in particular: Which of the following is allowed and which are not?

1) A class declaring/implementing both these methods:

    - (void) doSomethingWithObject:(ClassA*) object;
    - (void) doSomethingWithObject:(ClassB*) object;


2) A class declaring/implementing both these methods:

    - (void) doSomethingWithObject:(ClassA*) object;
    - (BOOL) doSomethingWithObject:(ClassA*) object;


3) A class declaring/implementing this method:

    - (void) doSomethingWithObject:(ClassB*) object;

...when its superclass declares/implements this method:

    - (void) doSomethingWithObject:(ClassA*) object;

(and the analogue for conflicting return value), both when A) `ClassB` descends from `ClassA`, and B) Not.