0

在为其他人编写框架时,为类添加前缀非常有用,这样您就可以使用具有相似名称类的多个框架而不会发生冲突。

然而,在应用程序二进制文件本身中,主应用程序类并不需要前缀,除非它们可能与某些库中的一些非前缀类发生冲突,无论是第三方的还是内置的。

显然第三方库是可以审查的,但是很难通过整个 Cocoa.framework 和 QuartzCore.framework 和 Foundation.framework 和 CoreAnimation.framework 等来确定是否有任何非前缀类。

有没有人知道或知道一种检查方法,在任何内置库中是否有任何非前缀类?有了一个明确的答案,普通大众会觉得在应用程序二进制文件的主(单独)代码库中命名他们的类而不带前缀会更舒服。

谢谢你。

4

3 回答 3

1

有了一个明确的答案,普通大众会觉得在应用程序二进制文件的主(单独)代码库中命名他们的类而不带前缀会更舒服。

如果你的类名在运行时冲突,编译器会告诉你。这是由您包含的标头和链接器路径定义的。

无需扫描代码库以查找非前缀类,因为您将无法编译。

如果您有重复的类名,您将收到错误“为 bla bla bla 找到重复的接口”。

于 2012-08-08T03:12:10.043 回答
1

实际上,有一些遗留类没有前缀。Object, List,Protocol浮现在脑海中。(是的,Protocol是 Apple 提供的一个类的名称,它甚至继承自Object而不是NSObject.)

这些类的标题位于/usr/include/objc/.

于 2012-08-08T04:47:11.670 回答
0

除了 Jonathan Grynspan 提到的遗留类名之外,在一些私有框架中肯定还有不带前缀的类名。例如,MIME私有框架包含名为MessageMimeBody等的类。

您不能直接与私有框架链接MIME(如果您想在 App Store 中)。但是您可能会链接到公共MessageUI框架,并MessageUI链接到私有MIME框架。当您启动您的应用程序时,Objective-C 运行时会注意到有两个具有相同名称的类,并警告您它任意选择其中一个而忽略另一个。

于 2012-08-08T05:09:17.873 回答