628

Cocoa/Cocoa Touch 中的许多类都有 NS 前缀。这是什么意思?

4

9 回答 9

809

Cocoa 框架的原始代码来自NeXTSTEP库 Foundation 和 AppKit(Apple 的 Cocoa 框架仍然使用这些名称),NextStep 工程师选择在其符号前加上 NS。

由于 Objective-C 是 C 的扩展,因此没有 C++ 中的命名空间,因此符号必须以唯一的前缀作为前缀,这样它们就不会发生冲突。这对于在框架中定义的符号尤为重要。

如果您正在编写一个应用程序,这样您的代码可能只会使用您的符号,您不必担心这一点。但是,如果您正在编写供他人使用的框架或库,您还应该为您的符号添加一个唯一前缀。CocoaDev 有一个页面,许多 Cocoa 社区的开发人员在该页面上列出了他们“选择的”前缀。您可能还会发现此 SO 讨论很有帮助。

于 2009-01-23T17:52:17.627 回答
491

它来自NeXTSTEP遗产。

于 2009-01-23T17:24:11.960 回答
155

N eXT S TEP 或N eXTSTEP/ S取决于您询问的对象。

一段时间以来,Sun 对 OpenStep 进行了相当大的投资。在 Sun 进入图片之前,基金会中的大多数东西,即使它当时不被称为基础,前缀NX,代表N e X T,并且在 Sun 进入图片之前的某个时候,所有东西都被重命名为NSS很可能当时并不代表 Sun,但在 Sun 介入之后,普遍的共识是它代表 Sun 以纪念他们的参与。

我实际上对此有参考,但我现在找不到。如果/当我再次找到它时,我会更新帖子。

于 2009-01-23T18:03:54.157 回答
59

它是 NextStep (= NS) 的遗产。NeXT 是史蒂夫乔布斯在 1985 年离开苹果后成立的计算机公司,NextStep 是它的操作系统(基于 UNIX)以及 Obj-C 语言和运行时。连同它的库和工具,NextStep 后来更名为 OpenStep(这也是 NeXT 与 Sun 共同开发的 API 上的名称),后来又成为 Cocoa。

这些不同的名称实际上非常令人困惑(特别是因为某些名称仅在字符大写或小写方面有所不同..),请尝试以下解释:

The Merger Openstep Confusion

于 2009-01-23T18:01:30.400 回答
48

来自 Apple 的开发者文档:

历史注释:如果你想知道为什么你遇到的这么多类都有一个 NS 前缀,那是因为 Cocoa 和 Cocoa Touch 的过去历史。Cocoa 最初是作为用于为 NeXTStep 操作系统构建应用程序的收集框架而诞生的。当 Apple 在 1996 年收购 NeXT 时,NeXTStep 的大部分内容都并入了 OS X,包括现有的类名。Cocoa Touch 是作为 Cocoa 的 iOS 版本引入的;一些类在 Cocoa 和 Cocoa Touch 中都可用,尽管每个平台也有大量独特的类。NS 和 UI(用于 iOS 上的用户界面元素)之类的两个字母前缀保留供 Apple 使用。

资料来源:使用 Objective-C 编程

于 2013-03-19T04:53:08.240 回答
25

基本上NS来自Next S TEP,这是苹果收购 Next 时成为 Mac OS X 的原始操作系统。

我想解释点别的,这就是为什么需要它。

在 C++ 中有命名空间,几乎任何东西都在std

这就是为什么你有 std::string 的原因。

使用了命名空间,因此您更难犯错误,并且您可以编写自己的类字符串而不会与系统冲突。

Objective-C 是 C 的超集,但它不包括命名空间,出于同样的原因,所有系统类都以 NS 或其他一些奇怪的前缀作为前缀。

这与所有 DirectX 类如何以D3D为前缀以及所有 OpenGL 类如何以gl为前缀是相同的。

这意味着您不应该使用NS来命名您自己的类,当您在 Core Animation 中看到NSCA或在 Core Graphics 中看到CG时,您就会明白这是对系统框架的调用。

Swift 改变了这个约定,因为 Swift 支持命名空间,并且它将其核心类型(如 String)映射到 NS 等价物。

于 2017-01-08T12:27:45.693 回答
24

来自Cocoa_(API) 维基百科

(重点补充)

Cocoa 类以首字母缩略词“NS”开头(代表 OpenStep 的 NeXT-Sun 创建,或代表 OpenStep 框架的原始专有术语NeXTSTEP):NSString、NSArray 等。

Foundation Kit,或更常见的简称Foundation,最早出现在 OpenStep中。在 Mac OS X 上,它基于 Core Foundation。Foundation 是一个通用的面向对象库,提供字符串和值操作、容器和迭代、分布式计算、运行循环和其他不直接绑定到图形用户界面的功能。用于框架中所有类和常量的“NS”前缀来自Cocoa 的 OPENSTEP 遗产,由NeXTSun共同开发。

于 2011-10-27T18:08:52.743 回答
12

当 NeXT 定义 NextStep API(相对于 NEXTSTEP 操作系统)时,他们使用前缀 NX,就像在 NXConstantString 中一样。当他们用 Sun 编写 OpenStep 规范时(不要与 OPENSTEP 操作系统混淆),他们使用 NS 前缀,就像在 NSObject 中一样。

于 2009-01-24T02:32:46.093 回答
7

Bill Bumgarner aka @bbum,谁应该知道,于 2005 年发布在CocoaBuilder 邮件列表中

在 NS 前缀发挥作用之后,Sun 进入了画面。在从 NeXTSTEP 3.0 迁移到 NeXTSTEP 4.0(也称为 OpenStep)期间,NS 前缀出现在公共 API 中。在 4.0 之前,少数符号使用 NX 前缀,但系统库提供的大多数类根本没有前缀——List、Hashtable、View 等...

似乎每个人都同意前缀 NX(用于 NeXT)一直使用到 1993/1994 年,Apple 的文档说

1994 年 9 月发布的官方 OpenStep API 是第一个在 Foundation 和 Application Kit 之间拆分 API 并且第一个使用“NS”前缀的 API。

于 2015-09-05T04:04:35.177 回答