ChatGPT解决这个技术问题 Extra ChatGPT

NS前缀是什么意思?

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

我更愿意相信它的意思是“命名空间”😂

W
Walid

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

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

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


B
Basil Bourque

它来自 NeXTSTEP 遗产。


...或者也许是 NeXT/Sun 遗产(Sun 是 OpenStep 联盟的参与者)
是的当然。这一切都在其他答案中得到了很好的展示,这就是为什么我没有费心将这些信息复制到我的。抱歉,如果这冒犯了某人-我不介意接受的答案是否更改为其他答案之一(如果可能的话-从未检查过)。
我想看更多,但链接到 NeXTSTEP
r
rjmunro

NeXTSTEP 或 NeXTSTEP/Sun 取决于您询问的对象。

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

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


我从一个非常可靠的来源听到了同样的故事。我很确定这是这里最准确的答案。
@SimonWoodside Link 已死。
N
NANNAV

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

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

TheMerger OpenstepConfusion


我本可以发誓苹果出于各种原因解雇了他。
@Nic Jobs 在失去与 Sculley 的权力斗争后于 85 年 9 月辞职。
J
Jonathan Lin

来自 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


m
marc_s

基本上 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 等价物。


c
chown

Cocoa_(API) Wikipedia

(重点补充)

Cocoa 类以首字母缩略词“NS”开头(代表 OpenStep 的 NeXT-Sun 创建,或代表 OpenStep 框架的原始专有术语 NeXTSTEP):NSString、NSArray 等。Foundation Kit,或更常见的简称 Foundation,最早出现在 OpenStep 中。在 Mac OS X 上,它基于 Core Foundation。 Foundation 是一个通用的面向对象库,提供字符串和值操作、容器和迭代、分布式计算、运行循环和其他不直接绑定到图形用户界面的功能。用于框架中所有类和常量的“NS”前缀来自于 Cocoa 的 OPENSTEP 遗产,由 NeXT 和 Sun 共同开发。


维基百科在这里是错误的。 Foundation Kit first appeared in Enterprise Objects Framework,早于 OpenStep。顺便说一句,Foundation 的 NeXT 版本据说是基于类似 CoreFoundation 的 C API,但直到 Mac OS X 才公开为公共接口。
user23743,我不认为你是正确的。 EOF 早于 OPENSTEP 操作系统,但不早于 OpenStep API。您直接链接到的 EOF 文档(参考 OpenStep)[cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/…,它们都于 1994 年发布。
佚名

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


C
Community

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。