I know that you probably do not want to hear this, but as soon as you start to be too smart with classes, this is a sure sign for using ordinary objects. I'm not sure if I understood your question correctly, but one way to solve typing problems is to pass id to the recipient:
id something = [VirginMobile class]; int i = [something methodReturningInt];
This will compile fine if the compiler can see the definition of methodReturningInt . And of course, at run time, VirginMobile has to respond to +methodReturningInt .
source share