Ответ 1
Objective-c не поддерживает виртуальные функции или сказать, что другой способ - все функции в классах obj-c являются виртуальными, поскольку вызовы методов определяются во время выполнения.
Если ваш подкласс переопределяет метод из суперкласса и вы ссылаетесь на экземпляр подкласса, используя указатель на суперкласс, тогда метод подкласса будет вызван:
@interface A{
}
-(void) someMethod;
@end
@interface B : A{
}
-(void) someMethod;
@end
...
A* obj = [[B alloc] init];
[obj someMethod]; // method implementation from B will be called