NS前缀是什么意思?

时间:2009-01-23 17:22:44

标签: ios objective-c cocoa cocoa-touch

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

10 个答案:

答案 0 :(得分:765)

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

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

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

答案 1 :(得分:426)

来自NeXTSTEP遗产。

答案 2 :(得分:147)

N eXT S TEP或 N eXTSTEP / S 取决于您的要求。

Sun在OpenStep上投入了相当大的一段时间。在Sun进入图片之前,基础中的大部分内容,即使它当时并不是基础,也以 NX 为前缀, N e X < / b> T,有时在Sun进入图片之前,所有内容都被重命名为 NS S 很可能并不代表Sun,但在Sun介入之后,普遍的共识是它代表Sun尊重他们的参与。

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

答案 3 :(得分:52)

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

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

TheMerger OpenstepConfusion

答案 4 :(得分:41)

来自Apple的开发者文档:

  

历史记录注意:如果你想知道为什么你遇到的这么多类有一个NS前缀,那是因为Cocoa和Cocoa Touch的过去历史。 Cocoa以收集的框架开始,用于为NeXTStep操作系统构建应用程序。当Apple在1996年购买NeXT时,很多NeXTStep都被整合到OS X中,包括现有的类名。 Cocoa Touch作为iOS的等同于Cocoa而被引入; Cocoa和Cocoa Touch都提供了一些类,但每个平台也有大量独特的类。   NS和UI之类的双字母前缀(适用于iOS上的用户界面元素)保留供Apple使用。

来源:Programming with Objective-C

答案 5 :(得分:22)

来自Cocoa_(API) Wikipedia

(强调补充)

  

可可类的首字母缩写“NS”(代表着    NeXT-Sun创建OpenStep ,或原始专有术语   对于OpenStep框架, NeXTSTEP ):NSString,NSArray等。

     

Foundation Kit ,或更常见的 Foundation ,首次出现在    OpenStep的。在Mac OS X上,它基于Core Foundation。基金会是一个   通用的面向对象的库提供字符串和值   操纵,容器和迭代,分布式计算,运行   循环,以及其他与图形无直接关系的函数   用户界面。 “NS”前缀,用于所有类和常量   该框架来自 Cocoa的OPENSTEP传统,这是联合的   由 NeXT Sun 开发。

答案 6 :(得分:11)

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

答案 7 :(得分:6)

Bumgarner aka @bbum, who should know张贴在CocoaBuilder mailing list in 2005

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

似乎每个人都同意在1993/1994之前使用前缀NX(对于NeXT)和Apple's docs say

  

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

答案 8 :(得分:6)

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

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

在C ++中有名称空间,几乎所有内容都在 std

这就是你有std :: string。

的原因

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

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

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

这意味着您不应该使用 NS 来命名您自己的类,当您在Core Animation中看到 NS CA

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

答案 9 :(得分:1)

  

NextStep自动。这是从NeXT创建objective-c时的延续   编写nextstep(后来的os x)和所有相关的应用程序等   表示不属于原始C基础的元素,   例如,C中没有'string'元素,所以在objective-c中,   它是一个额外的基础元素'NSString'。