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