前言
之前一直没有理解什么是动态绑定,刚刚看到《Objective-C全解》的大概了解了
什么是动态绑定
程序执行时才确定对象的属性和需要响应的方法。运行时系统首先确定接收者的类型,然后根据消息名在类的方法表里选择相应的方法执行,如果没有找到父类中继续寻找。如果没有找到则,报告错误。
@interface A : NSObject
- (void)whoAreYou;
@end
@implementation A
- (void)whoAreYou {
NSLog( @"I'm A" );
}
@interface B : NSObject
- (void)whoAreYou;
@end
@implementation B
- (void)whoAreYou {
NSLog( @"I'm B" );
}
int main(int argc, const char * argv[]){
@autoreleasepool {
id obj;
int n;
scanf("%d", &n);
switch ( n ) {
case 0:
obj = [[A alloc] init];
break;
case 1:
obj = [[B alloc] init];
break;
case 2:
obj = [[NSObject alloc] init];
break;
default:
break;
}
[obj whoAreYou];
}
return 0;
}