Cocoa/Cocoa Touch 中的许多类都有 NS 前缀。这是什么意思?
Cocoa 框架的原始代码来自 NeXTSTEP 库 Foundation 和 AppKit(Apple 的 Cocoa 框架仍使用这些名称),NextStep 工程师选择在其符号前加上 NS。
由于 Objective-C 是 C 的扩展,因此没有 C++ 中的命名空间,因此符号必须以唯一的前缀作为前缀,这样它们就不会发生冲突。这对于在框架中定义的符号尤为重要。
如果您正在编写一个应用程序,这样您的代码可能只会使用您的符号,您不必担心这一点。但是,如果您正在编写供他人使用的框架或库,您还应该为您的符号添加一个唯一前缀。 CocoaDev has a page Cocoa 社区中的许多开发人员列出了他们的“选择”前缀。您可能还会发现 this SO discussion 很有帮助。
它来自 NeXTSTEP 遗产。
NeXTSTEP 或 NeXTSTEP/Sun 取决于您询问的对象。
一段时间以来,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 使用。
来源:Programming with Objective-C
基本上 NS 来自 NextSTEP,这是苹果收购 Next 时成为 Mac OS X 的原始操作系统。
我想解释点别的,这就是为什么需要它。
在 C++ 中有命名空间,几乎任何东西都在 std
这就是为什么你有 std::string 的原因。
使用了命名空间,因此您更难犯错误,并且您可以编写自己的类字符串而不会与系统冲突。
Objective-C 是 C 的超集,但它不包括命名空间,出于同样的原因,所有系统类都以 NS 或其他一些奇怪的前缀作为前缀。
这与所有 DirectX 类如何以 D3D 为前缀以及所有 OpenGL 类如何以 gl 为前缀是相同的。
这意味着您不应该使用 NS 来命名您自己的类,当您在 Core Animation 中看到 NS、CA 或在 Core Graphics 中看到 CG 时,您就会明白这是对系统框架的调用。
Swift 改变了这个约定,因为 Swift 支持命名空间,并且它将其核心类型(如 String)映射到 NS 等价物。
(重点补充)
Cocoa 类以首字母缩略词“NS”开头(代表 OpenStep 的 NeXT-Sun 创建,或代表 OpenStep 框架的原始专有术语 NeXTSTEP):NSString、NSArray 等。Foundation Kit,或更常见的简称 Foundation,最早出现在 OpenStep 中。在 Mac OS X 上,它基于 Core Foundation。 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 前缀,但系统库提供的大多数类根本没有前缀——List、Hashtable、View 等...
似乎每个人都同意前缀 NX(代表 NeXT)一直使用到 1993/1994 年,并且 Apple's docs say:
1994 年 9 月发布的官方 OpenStep API 是第一个在 Foundation 和 Application Kit 之间拆分 API 并且第一个使用“NS”前缀的 API。
不定期副业成功案例分享