iOS中类别名称的意义

时间:2014-12-23 10:55:44

标签: ios objective-c

在创建类别时,有人可以告诉我类别名称的重要性吗?

我知道编译器使用它来识别和匹配带有接口的实现。它还有其他用途吗?

如果我们创建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。

我想知道为什么以及如何涉及类别的名称?

2 个答案:

答案 0 :(得分:4)

关于类别名称,根据this article,唯一的限制是它们不会与同一类别中的其他类别名称冲突。

对于使用相同方法名称的类别,根据Apple Docs,未定义哪个方法将在运行时调用。

答案 1 :(得分:0)

无论哪种方法具有相同的名称"胜出"与类别名称没有任何关系。 "赢得"一个将是加载 last 的那个,并且在运行时之前不知道哪一个,因为加载顺序是非确定性的。