NS前缀是什么意思?


Answers:


456

它来自NeXTSTEP的传承。


7
...或者可能是NeXT / Sun的遗产(Sun是OpenStep财团的参与者)
Barry Wark 2012年

27
当然是。在其他答案中都列出了所有这些内容,这就是为什么我不费心将这些信息复制到我的信息中的原因。抱歉,如果这样冒犯了某人-我不在乎接受的答案是否更改为另一个(如果可能的话-从未检查过)。
Olaf Kock 2012年

2
我想看到更多,但链接到NeXTSTEP
Bagrat Kirakosian 2015年

784

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

因为Objective-C是C的扩展,因此没有像C ++中那样的名称空间,所以必须在符号前面加上唯一的前缀,以免符号冲突。这对于框架中定义的符号特别重要。

如果您正在编写应用程序,以使您的代码仅可能使用符号,则不必为此担心。但是,如果您要编写供他人使用的框架或库,则还应在符号前面加上唯一的前缀。CocoaDev有一个页面,可可社区中的许多开发人员都列出了他们的“选择”前缀。您可能还会发现此SO讨论很有帮助。


150

N eXT S TEP或N eXTSTEP / S取决于您要询问的人。

Sun在OpenStep上进行了相当大的投资。在Sun输入图片之前,基金会中的大多数事物(即使当时不被称为基金会)都以NX来表示N e X T,并且在Sun进入图片之前的某个时候,所有内容都重命名为NSS很可能当时不代表Sun,但是在Sun达成普遍共识之后,S代表Sun尊重他们的参与。

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


4
我已经从非常可靠的消息来源听到了同样的故事;我很确定这是最准确的答案。
泰勒(Tyler)


@SimonWoodside链接已死。
Dinsdale


53

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

这些不同的名称实际上是很令人困惑的(特别是由于某些名称仅在大写或小写字符方面有所不同。),请尝试以下方式进行解释:

合并开放式混乱


4
我本可以宣誓苹果因各种原因将他开除。
Fund Monica的诉讼

43

来自苹果的开发人员文档:

历史注释:如果您想知道为什么遇到的这么多类都带有NS前缀,那是由于Cocoa和Cocoa Touch的历史。Cocoa最初是作为收集的用于为NeXTStep操作系统构建应用程序的框架而诞生的。当苹果公司在1996年购买NeXT时,许多NeXTStep被合并到OS X中,包括现有的类名。Cocoa Touch作为iOS的Cocoa引入。尽管在每个平台上都有大量独特的类,但在Cocoa和Cocoa Touch中都提供了一些类。保留NS和UI之类的两个字母的前缀(用于iOS上的用户界面元素)供Apple使用。

来源:使用Objective-C编程


23

来自Cocoa_(API)维基百科

(强调)

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

Foundation Kit,或更简单的说是Foundation,首先出现在 OpenStep中。在Mac OS X上,它基于Core Foundation。Foundation是一个通用的面向对象的库,提供字符串和值操作,容器和迭代,分布式计算,运行循环以及其他与图形用户界面没有直接联系的功能。框架中所有类和常量使用的“ NS”前缀来自NeXTSun共同开发的Cocoa的OPENSTEP传统


维基百科在这里是错误的。Foundation Kit 首先出现在Enterprise Objects Framework中,该版本早于OpenStep。顺便说一下基金会的下一个版本的假想基础上的CoreFoundation般的C API,但并没有公开为公共接口,直到Mac OS X的

@ user23743,我认为您不正确。EOF早于OPENSTEP操作系统,但不早于OpenStep API。您直接链接到的EOF文档(参考OpenStep)[ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/…,它们都于1994
。– AriX 2014年

12

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


10

基本上,NS来自N ext S TEP,这是苹果收购Next后成为Mac OS X的原始操作系统。

我想解释一下其他原因,这就是为什么确实需要它。

在C ++中有命名空间,几乎所有东西都放在std中

这就是为什么您拥有std :: string的原因。

使用了命名空间,因此您更容易出错,并且可以编写自己的类字符串而不与系统冲突。

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

这是所有DirectX类都以D3D开头的前缀,所有OpenGL类都以gl开头的前缀。

这意味着您不应该使用NS来命名自己的类,并且当您在核心动画中看到NSCA或在核心图形中看到CG时,您就会知道这是对系统框架的调用。

Swift更改了此约定,因为Swift支持名称间隔,并将其核心类型(如String)映射到NS等效项。


6

Bill Bumgarner aka @bbum应该知道,他在2005年发布在CocoaBuilder邮件列表中

在NS前缀生效后,Sun进入了图片。从NeXTSTEP 3.0迁移到NeXTSTEP 4.0(也称为OpenStep)期间,NS前缀出现在公共API中。在4.0之前的版本中,少数符号使用NX前缀,但是系统库提供的大多数类根本没有前缀-列表,哈希表,视图等。

似乎每个人都同意前缀NX(用于NeXT)一直使用到1993/1994年,Apple的文档说

正式的OpenStep API于1994年9月发布,它是第一个在Foundation和Application Kit之间划分API的人,也是第一个使用“ NS”前缀的人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.