在创建类别时,有人可以告诉我类别名称的重要性吗?
我知道编译器使用它来识别和匹配带有接口的实现。它还有其他用途吗?
如果我们创建2个不同名称的类别,以2种不同的方式实现相同的方法,该怎么办?例如:
@interface NSString(Good)
- (BOOL)isGood;
@end
@implementation NSString(Good)
- (BOOL)isGood
{
return TRUE;
}
@end
@interface NSString(Bad)
- (BOOL)isGood;
@end
@implementation NSString(Bad)
- (BOOL)isGood
{
return FALSE;
}
@end
现在在程序中我创建了一个字符串
NSString *goodString = @"GOOD";
我将[goodString isGood]
的输出视为false。
我想知道为什么以及如何涉及类别的名称?
答案 0 :(得分:4)
关于类别名称,根据this article,唯一的限制是它们不会与同一类别中的其他类别名称冲突。
对于使用相同方法名称的类别,根据Apple Docs,未定义哪个方法将在运行时调用。
答案 1 :(得分:0)
无论哪种方法具有相同的名称"胜出"与类别名称没有任何关系。 "赢得"一个将是加载 last 的那个,并且在运行时之前不知道哪一个,因为加载顺序是非确定性的。