Cocoa / Cocoa Touch中的许多类都有NS前缀。这是什么意思?
答案 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。
这些不同的名字实际上非常令人困惑(特别是因为有些名称的区别仅在于大写或小写的大小...),请尝试以下解释:
答案 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使用。
答案 5 :(得分:22)
(强调补充)
可可类的首字母缩写“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'。