【发布时间】:2010-10-03 04:36:14
【问题描述】:
Cocoa/Cocoa Touch 中的许多类都有 NS 前缀。什么意思?
【问题讨论】:
-
我更愿意相信它的意思是“命名空间”????
标签: ios objective-c cocoa cocoa-touch terminology
Cocoa/Cocoa Touch 中的许多类都有 NS 前缀。什么意思?
【问题讨论】:
标签: ios objective-c cocoa cocoa-touch terminology
Cocoa 框架的原始代码来自 NeXTSTEP 库 Foundation 和 AppKit(Apple 的 Cocoa 框架仍然使用这些名称),NextStep 工程师选择在其符号前加上 NS。
由于 Objective-C 是 C 的扩展,因此没有像 C++ 中那样的命名空间,因此符号必须以唯一的前缀作为前缀,这样它们就不会发生冲突。这对于在框架中定义的符号尤为重要。
如果您正在编写一个应用程序,这样您的代码可能只会使用您的符号,您不必担心这一点。但是,如果您正在编写供他人使用的框架或库,您还应该为您的符号添加一个唯一前缀。 CocoaDev has a page Cocoa 社区中的许多开发人员列出了他们的“选择”前缀。您可能还会发现 this SO discussion 很有帮助。
【讨论】:
来自NeXTSTEP 遗产。
【讨论】:
NeXTSTEP 或 NeXTSTEP/Sun 取决于您询问的对象。 p>
一段时间以来,Sun 对 OpenStep 进行了相当大的投资。在 Sun 进入图片之前,基金会中的大多数东西,即使它当时不被称为基金会,也是前缀 NX,代表 NeXT,在 Sun 进入图片之前的某个时候,所有东西都被重命名为 NS。 S 很可能当时并不代表 Sun,但在 Sun 介入之后,普遍的共识是它代表 Sun 以尊重他们的参与。
我实际上对此有一个参考,但我现在找不到它。如果/当我再次找到它时,我会更新帖子。
【讨论】:
这是 NextStep (= NS) 的遗产。 NeXT 是史蒂夫乔布斯在 1985 年离开苹果后成立的计算机公司,NextStep 是它的操作系统(基于 UNIX)以及 Obj-C 语言和运行时。连同它的库和工具,NextStep 后来更名为 OpenStep(这也是 NeXT 与 Sun 共同开发的 API 上的名称),后来又成为 Cocoa。
这些不同的名称实际上是相当混乱的(特别是因为有些名称的不同之处仅在于字符是大写还是小写..),请尝试以下解释:
【讨论】:
来自 Apple 的开发者文档:
历史记录:如果你想知道为什么你遇到的这么多类都有一个 NS 前缀,那是因为 Cocoa 和 Cocoa Touch 的过去历史。 Cocoa 最初是作为用于为 NeXTStep 操作系统构建应用程序的收集框架而诞生的。当 Apple 在 1996 年收购 NeXT 时,NeXTStep 的大部分内容都并入了 OS X,包括现有的类名。 Cocoa Touch 是作为 Cocoa 的 iOS 版本引入的;一些类在 Cocoa 和 Cocoa Touch 中都可用,尽管每个平台也有大量独特的类。 NS 和 UI(用于 iOS 上的用户界面元素)之类的两个字母前缀供 Apple 使用。
【讨论】:
基本上NS来自NextSTEP,这是苹果收购Next时成为Mac OS X的原始操作系统。
我想解释一些别的东西,这就是为什么需要它。
在 C++ 中有命名空间,几乎所有东西都放在 std
这就是你有 std::string 的原因。
使用了命名空间,因此您更难出错,并且您可以编写自己的类字符串而不会与系统冲突。
Objective-C 是 C 的超集,但它不包括命名空间,出于同样的原因,所有系统类都以 NS 或其他一些奇怪的前缀作为前缀。
这与所有DirectX类如何以D3D为前缀以及所有OpenGL类如何以gl为前缀是相同的。
这意味着你不应该使用 NS 来命名你自己的类,并且当你在 Core Animation 中看到 NS、CA 或 >CG 在 Core Graphics 中你明白这是对系统框架的调用。
Swift 改变了这种约定,因为 Swift 支持命名空间,并且它将其核心类型(如 String)映射到 NS 等价物。
【讨论】:
(强调)
Cocoa 类以首字母缩略词 "NS" 开头(代表 NeXT-Sun 创建的 OpenStep,或为原始专有术语 对于 OpenStep 框架,NeXTSTEP):NSString、NSArray 等
Foundation Kit,或更常见的简称 Foundation,首次出现在 OpenStep。在 Mac OS X 上,它基于 Core Foundation。基金会是一个 提供字符串和值的通用面向对象库 操作、容器和迭代、分布式计算、运行 循环和其他不直接绑定到图形的功能 用户界面。 “NS”前缀,用于所有类和常量 该框架来自 Cocoa 的 OPENSTEP 遗产,该遗产是联合 由 NeXT 和 Sun 开发。
【讨论】:
当 NeXT 定义 NextStep API(相对于 NEXTSTEP 操作系统)时,他们使用前缀 NX,就像在 NXConstantString 中一样。当他们使用 Sun 编写 OpenStep 规范时(不要与 OPENSTEP 操作系统混淆),他们使用 NS 前缀,就像在 NSObject 中一样。
【讨论】:
Bill Bumgarner aka @bbum, who should know,张贴在CocoaBuilder mailing list in 2005:
在 NS 前缀开始发挥作用之后,Sun 进入了画面。在从 NeXTSTEP 3.0 迁移到 NeXTSTEP 4.0(也称为 OpenStep)期间,NS 前缀出现在公共 API 中。在 4.0 之前,一个 少数符号使用 NX 前缀,但大多数类由 系统库根本没有前缀——列表、哈希表、 查看等...
似乎每个人都同意前缀 NX(代表 NeXT)一直使用到 1993/1994 年,而Apple's docs say:
1994 年 9 月发布的官方 OpenStep API 是第一个在 Foundation 和 Application Kit 之间拆分 API 并且第一个使用“NS”前缀的 API。
【讨论】: