NS前缀是啥意思?
Posted
技术标签:
【中文标题】NS前缀是啥意思?【英文标题】:What does the NS prefix mean?NS前缀是什么意思? 【发布时间】:2009-01-23 17:22:44 【问题描述】:Cocoa/Cocoa Touch 中的许多类都有 NS 前缀。什么意思?
【问题讨论】:
我更愿意相信它的意思是“命名空间”???? 【参考方案1】:Cocoa 框架的原始代码来自 NeXTSTEP 库 Foundation 和 AppKit(Apple 的 Cocoa 框架仍然使用这些名称),NextStep 工程师选择在其符号前加上 NS。
由于 Objective-C 是 C 的扩展,因此没有像 C++ 中那样的命名空间,因此符号必须以唯一的前缀作为前缀,这样它们就不会发生冲突。这对于在框架中定义的符号尤为重要。
如果您正在编写一个应用程序,这样您的代码可能只会使用您的符号,您不必担心这一点。但是,如果您正在编写一个供他人使用的框架或库,您还应该为您的符号添加一个唯一前缀。 CocoaDev has a page Cocoa 社区中的许多开发人员列出了他们的“选择”前缀。您可能还会发现 this SO discussion 很有帮助。
【讨论】:
【参考方案2】:来自NeXTSTEP 遗产。
【讨论】:
...或者可能是 NeXT/Sun 的遗产(Sun 是 OpenStep 联盟的参与者) 是的,当然。这一切都在其他答案中得到了很好的阐述,这就是为什么我没有费心将这些信息复制到我的。抱歉,如果这冒犯了某人 - 我不介意接受的答案是否更改为其他答案之一(如果可能的话 - 从未检查过)。 我想看到更多,但链接到 NeXTSTEP【参考方案3】:NeXTSTEP 或 NeXTSTEP/Sun 取决于您询问的对象。 p>
一段时间以来,Sun 对 OpenStep 进行了相当大的投资。在 Sun 进入图片之前,基金会中的大多数东西,即使它当时不被称为基金会,也都以 NX 为前缀,表示 NeXT,在 Sun 进入图片之前的某个时候,所有东西都被重命名为 NS。 S 很可能当时并不代表 Sun,但在 Sun 介入之后,普遍的共识是它代表 Sun 以尊重他们的参与。
我实际上对此有一个参考,但我现在找不到它。如果/当我再次找到它时,我会更新帖子。
【讨论】:
我从一个非常可靠的来源听到了同样的故事;我很确定这是这里最准确的答案。 我找到了一个参考:cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html @SimonWoodside Link 已死。 互联网参考档案:web.archive.org/web/20151008121657/http://www.cocoabuilder.com/…【参考方案4】:这是 NextStep (= NS) 的遗产。 NeXT 是史蒂夫乔布斯在 1985 年离开苹果后成立的计算机公司,NextStep 是它的操作系统(基于 UNIX)以及 Obj-C 语言和运行时。连同它的库和工具,NextStep 后来更名为 OpenStep(这也是 NeXT 与 Sun 共同开发的 API 上的名称),后来又成为 Cocoa。
这些不同的名称实际上是相当混乱的(特别是因为有些名称的不同之处仅在于字符是大写还是小写..),请尝试以下解释:
TheMerger OpenstepConfusion
【讨论】:
我本可以发誓苹果公司出于各种原因解雇了他。 @Nic Jobs 在与 Sculley 的权力斗争失败后于 85 年 9 月辞职。【参考方案5】:来自 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
【讨论】:
【参考方案6】:基本上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 等价物。
【讨论】:
【参考方案7】:来自Cocoa_(API) Wikipedia:
(强调)
Cocoa 类以首字母缩略词 "NS" 开头(代表 NeXT-Sun 创建的 OpenStep,或为原始专有术语 对于 OpenStep 框架,NeXTSTEP):NSString、NSArray 等
Foundation Kit,或更常见的简称 Foundation,首次出现在 OpenStep。在 Mac OS X 上,它基于 Core 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 年发布。【参考方案8】:当 NeXT 定义 NextStep API(相对于 NEXTSTEP 操作系统)时,他们使用前缀 NX,就像在 NXConstantString 中一样。当他们使用 Sun 编写 OpenStep 规范时(不要与 OPENSTEP 操作系统混淆),他们使用 NS 前缀,就像在 NSObject 中一样。
【讨论】:
【参考方案9】: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 是第一个将 API 拆分为 Foundation 和 Application Kit 的 API,并且第一个使用“NS”前缀。
【讨论】:
以上是关于NS前缀是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章