objc的重载以及void指针?


   
  @interface MyClass : NSObject{}
  
- (void)show;
@end
@implementation MyClass
- (void)show {
NSLog(@"MyClass");
}
@end

@interface MySubClass : MyClass
{}
@end
@implementation MySubClass
- (void)show {
NSLog(@"MySubClass");
}
@end

一个临时函数:
- (void)show:(void *)temp {
MyClass *mc = (MyClass *)temp;
[mc show];
}

在主函数中调用:

MySubClass *msc = [[MySubClass alloc] init];
void *temp = (void *)msc;
[self show:temp];

控制台的结果://MySubClass

不是很明白这段代码的意思?

objective-c cocoa

王道征途泡泡系 10 years, 8 months ago

void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。可以相当于id类型。
子类对父类方法的重写是不可逆的,即只要重写了方法父类的方法就会被“忘掉”。在Main中使用MySubClass创建了实例temp,在临时函数show中将这个temp强制转换成了MyClass类型,但是之前由MySubClass重写的show方法已经是子类的重写后的方法,而不是父类的方法,所以最后输出的是MySubClass。不知道我讲的清不清楚,可能有讲的不对的,可以百度继承和重载。

漂浮的大饼 answered 10 years, 8 months ago

Your Answer