NS前缀是什么意思?

问题描述 投票:546回答:10

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

ios objective-c cocoa cocoa-touch
10个回答
424
投票

它来自NeXTSTEP遗产。


1
投票

下一步。从NeXT创建objective-c到编写nextstep(后来的os x)和所有相关应用程序等时,这是一个延续。它们代表的元素不是原始C支撑的一部分,例如,没有'字符串' C中的元素,所以在objective-c中,它是一个额外的基础元素'NSString'。


765
投票

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

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

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


147
投票

NeXTSTEP或NeXTSTEP / Sun取决于您的要求。

Sun暂时对OpenStep进行了大量投资。在Sun进入画面之前,基础中的大部分内容,即使它当时并不是基础,也是为NeXT加上NX前缀,有时在Sun进入画面之前,所有内容都被重命名为NS。 S很可能不代表Sun,但在Sun介入之后,普遍的共识是,它代表Sun尊重他们的参与。

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


52
投票

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

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

TheMerger OpenstepConfusion


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


22
投票

来自Cocoa_(API) Wikipedia

(重点补充)

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

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


10
投票

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


6
投票

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等...

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

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


6
投票

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

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

在C ++中有名称空间,几乎任何东西都在std中

这就是你有std :: string的原因。

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

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

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

这意味着你不应该使用NS命名你自己的类,当你看到核心动画中的NS,CA或核心图形中的CG时,你就会明白这是对系统框架的调用。

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

© www.soinside.com 2019 - 2024. All rights reserved.