为什么 Xcode 允许创建重复的 Objective-C 类别?
Why Xcode allows create duplicate Objective-C Category?
Xcode 不允许您创建重复的 class 文件。我很好奇为什么它允许您在不同的文件夹中创建重复的类别文件。
例如:
一个文件夹
--- NSObject+测试
B文件夹
--- NSObject+测试
项目可以运行正常
Xcode 和 Objective-C 允许您创建重复的 class 文件。它不允许您做的是创建重复的 classes。在Objective-C中,传统的做法是将文件命名为与class相同的文件名,但这既不通用,也不强制执行。
我认为您要问的问题是为什么 Objective-C 允许具有相同名称的多个类别(无论它们在什么文件中)。原因是因为 Objective-C 不太关心类别的名称是什么。最初,类别是一种将大型 class 组织成多个文件的方法(这就是为什么它们被称为 "categories" 而不是 "extensions" 的原因)。最终,它们被用来向现有 classes 添加新方法。在此过程中,编译器从未真正对类别名称(括号中的部分)感到非常烦恼。它们通常被视为评论。
我不认为语言设计者在特定时刻决定 "it should be legal to have multiple categories with the same name." 只是从未被检查或阻止。
更有趣和重要的碰撞是两个类别可以添加相同的方法名称。编译器并没有阻止这种情况,但实际上是一个严重的问题。没有定义将执行哪个方法,编译器也不会告诉你你犯了这个错误。这就是为什么为类别方法名称添加前缀以防止冲突很重要。为了保持一致性,最好也为类别名称加上前缀。
编译器为什么要关心 file 名称?从来没有听说过编译器会做这样的事情。
这可能是有原因的,我。 e.如果在文件夹 A 中。文件夹B是软件的不同版本或配置。
Xcode 不允许您创建重复的 class 文件。我很好奇为什么它允许您在不同的文件夹中创建重复的类别文件。
例如: 一个文件夹 --- NSObject+测试 B文件夹 --- NSObject+测试
项目可以运行正常
Xcode 和 Objective-C 允许您创建重复的 class 文件。它不允许您做的是创建重复的 classes。在Objective-C中,传统的做法是将文件命名为与class相同的文件名,但这既不通用,也不强制执行。
我认为您要问的问题是为什么 Objective-C 允许具有相同名称的多个类别(无论它们在什么文件中)。原因是因为 Objective-C 不太关心类别的名称是什么。最初,类别是一种将大型 class 组织成多个文件的方法(这就是为什么它们被称为 "categories" 而不是 "extensions" 的原因)。最终,它们被用来向现有 classes 添加新方法。在此过程中,编译器从未真正对类别名称(括号中的部分)感到非常烦恼。它们通常被视为评论。
我不认为语言设计者在特定时刻决定 "it should be legal to have multiple categories with the same name." 只是从未被检查或阻止。
更有趣和重要的碰撞是两个类别可以添加相同的方法名称。编译器并没有阻止这种情况,但实际上是一个严重的问题。没有定义将执行哪个方法,编译器也不会告诉你你犯了这个错误。这就是为什么为类别方法名称添加前缀以防止冲突很重要。为了保持一致性,最好也为类别名称加上前缀。
编译器为什么要关心 file 名称?从来没有听说过编译器会做这样的事情。
这可能是有原因的,我。 e.如果在文件夹 A 中。文件夹B是软件的不同版本或配置。