如果两个不同的类别具有相同的方法,那么哪一个将由目标C运行时系统调用?
例如:
@interface ClassA (MathOps)
-(void)CategoryMethod;
@end
@interface ClassA (MathOps1)
-(void)CategoryMethod;
@end
@implementation ClassA(MathOps1)
- (void) CategoryMethod{
NSLog(@"Inside Category Method 2");
}
@end
@implementation ClassA(MathOps)
- (void) CategoryMethod{
NSLog(@"Inside Category Method 1");
}
@end
Run Code Online (Sandbox Code Playgroud)
现在,如果我正在呼叫,[ObjClassA CategoryMethod];,那么哪一个叫?为什么?
正如 @Dave DeLong 所说,该行为是未定义的。其中一种方法将“获胜”,但无法知道哪一种方法会“获胜”。如果任何其他代码依赖于丢失方法,您会发现自己正在调试一些潜在的奇怪错误。最好一起避免这种情况。在实现“明显的”辅助方法时,这是一个特殊的问题。如果这些方法被添加到未来的框架版本中,您的类别将覆盖类中的新方法(如果它位于主类主体中),或者如果添加到类别中,则可能会覆盖该方法。哎呀。
许多为现有(例如 Cocoa)类提供类别的 Cocoa 框架都遵循一种模式,将其类前缀添加到方法中,以尽量减少名称冲突的可能性。因此,例如,您可以创建如下类别:
@interface NSObject (MyCategory)
- (void)myprefix_categoryMethod;
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |