我遇到了一个与 Objective-C 中的类继承相关的奇怪场景。
假设我有三个类 A、B 和 C,它们继承自基类 X。类 A、B 和 X 具有构造函数:
- (id)InitWithString:(NSString*)someString andDelegate:(id<SomeProtocol>)aDelegate
唯一的区别是每个类对委托使用不同的协议。
发生的情况是,对于 A 和 B,编译器尝试使用 C 中的方法。警告通知我,提供的委托未实现类 C 的构造函数所需的协议。委托本身没有任何问题,因为每个类都有一个委托,该委托为类自己的构造函数实现了正确的协议。运行时一切正常,所有类都调用了正确的函数。
我尝试让构造函数返回 A*、B* 或 C* 而不是匿名 id,但这仍然不能解决问题。
唯一有效的方法是像这样对正确的类进行强制转换:
instanceOfA = [(A*)[A alloc] InitWithString:@"" andDelegate:aDelegate];
这似乎是多余和不必要的。我可能在这里遗漏了一些明显的东西。