为什么Xcode允许创建重复的Objective-C类别?

时间:2019-06-30 13:20:20

标签: objective-c categories

Xcode不允许您创建重复的类文件。我很好奇为什么它允许您在不同的文件夹中创建重复的类别文件。

例如: 一个文件夹 -NSObject +测试 B文件夹 --- NSObject + Test

项目可以正常运行。

2 个答案:

答案 0 :(得分:1)

Xcode和Objective-C确实允许您创建重复的类文件。它不允许您做的是创建重复的。在Objective-C中,通常使用与类相同的名称来命名文件,但这既不是通用的也不是强制的。

我想您要问的问题是,为什么Objective-C允许多个具有相同名称的类别(无论它们位于哪个文件中)。原因是因为Objective-C不太在乎类别的名称。最初,类别是一种将大型类组织为多个文件的方法(这就是为什么它们被称为“类别”而不是“扩展名”的原因)。最终,它们被用来向现有类添加新方法。在此过程中,编译器从未真正对类别名称(括号中的部分)感到非常困扰。通常将它们视为评论。

我不会假设语言设计者会在某个特定时刻决定“使用相同名称的多个类别应该合法”。从来没有检查过或阻止过。

更有趣和重要的冲突是,两个类别可以添加相同的方法名称。编译器并没有阻止这,但是实际上是一个严重的问题。还没有定义执行哪个方法,编译器也不会告诉您您犯了这个错误。这就是为什么在类别方法名称前加前缀以防止冲突很重要的原因。为保持一致性,也最好在类别名称前添加前缀。

答案 1 :(得分:0)

为什么编译器应该关心 file 名称?从来没有听说编译器会做这种事情。

也许是有原因的。 e。如果在文件夹A中。文件夹B是该软件的不同版本或配置。