NS前缀是什么意思?
Cocoa / Cocoa Touch中的许多类都有NS前缀。 这是什么意思?
它来自NeXTSTEP遗产。
Cocoa框架的原始代码来自于NeXTSTEP库Foundation和AppKit(这些名字仍然被苹果的Cocoa框架使用),NextStep的工程师select在NS的前面添加符号。
由于Objective-C是C的扩展,因此不具有类似于C ++的名称空间,符号必须以唯一的前缀作为前缀,以避免碰撞。 这对于框架中定义的符号特别重要。
如果您正在编写一个应用程序,那么您的代码只能使用您的符号,您不必担心这一点。 但是如果你正在编写一个框架或库供他人使用,你还应该在你的符号前加一个唯一的前缀。 CocoaDev有一个页面 ,Cocoa社区的许多开发者已经列出了他们的“select”前缀。 你也可能会发现这个SO讨论有帮助。
NEXT S TEP或NEXT TEP / S un取决于您问的是谁。
Sun在OpenStep上投入了相当大的时间。 在Sun进入大局之前,即使它不被称为基础,在NX之前 ,也是在N e X T之前,有时在Sun进入图片之前,所有的东西都被重新命名为NS 。 S最有可能不支持Sun,但在Sun达成共识之后,是Sun支持他们的参与。
其实我有一个参考,但我现在找不到它。 当我再次find时,我会更新这篇文章。
这是NextStep(= NS)遗产。 NeXT是Steve Jobs在1985年辞去Apple之后成立的计算机公司,NextStep是与Obj-C语言和运行时一起的操作系统(基于UNIX)。 NextStep和它的库和工具一起,后来被重新命名为OpenStep(也是NeXT与Sun共同开发的一个API的名称),后来又变成了Cocoa。
这些不同的名字实际上是相当混乱的(特别是因为一些名字只是在大小写不同的情况下才会有所不同),试试这个解释:
Merger OpenstepConfusion
从苹果的开发者文档:
历史注意:如果你想知道为什么你遇到的这么多的类有一个NS前缀,那是因为cocoa和Cocoa Touch的过去的历史。 cocoa开始用于构build用于NeXTStep操作系统的应用程序的收集框架。 当苹果在1996年购买NeXT时,NeXTStep的大部分内容都被纳入OS X,包括现有的类名。 Cocoa Touch被引入cocoa的iOS等价物; Cocoa和Cocoa Touch都提供了一些类,尽pipe每个平台都有很多独特的类。 像NS和UI这样的双字母前缀(用于iOS上的用户界面元素)被保留供Apple使用。
来源: 用Objective-C编程
来自Cocoa_(API)维基百科 :
(强调加)
cocoa类首先是缩写“NS” (代表OpenStep的NeXT-Sun创build ,或者OpenStep框架的原始专有术语NeXTSTEP ):NSString,NSArray等
基础工具包 ,或更普遍的简单的基础 ,首先出现在OpenStep 。 在Mac OS X上,它基于Core Foundation。 Foundation是一个通用的面向对象的库,提供string和值操作,容器和迭代,分布式计算,运行循环以及其他不直接绑定到graphics用户界面的函数。 用于框架中所有类和常量的“NS”前缀来自cocoa的OPENSTEP遗产,这是由NeXT和Sun联合开发的 。
当NeXT定义NextStep API(而不是NEXTSTEP操作系统)时,他们使用前缀NX,就像在NXConstantString中一样。 当他们在Sun编写OpenStep规范时(不要与OPENSTEP操作系统混淆),他们使用NS前缀,就像在NSObject中一样。
Bill Bumgarner 又名@bbum,谁应该知道 , 2005年在CocoaBuilder邮件列表上发布:
在NS前缀进入后,Sun稍微进了一下。 从NeXTSTEP 3.0到NeXTSTEP 4.0(也称为OpenStep),NS前缀在公共API中出现。 在4.0之前,一些符号使用了NX前缀,但是系统库提供的大多数类都没有加上前缀 – List,Hashtable,View等等。
似乎所有人都同意,前缀NX(NeXT)直到1993/1994被使用, 苹果的文档说 :
1994年9月发布的官方OpenStep API是第一个在基础和应用套件之间分割API,第一个使用“NS”前缀的API。
基本上, NS来自N ext S TEP,这是苹果公司收购Next之后成为Mac OS X的原始操作系统。
我想解释一些其他的东西,这就是为什么它需要。
在C ++中有名称空间,几乎任何东西都是标准的
这就是为什么你有std :: string。
命名空间被使用,所以你很难犯错,你可以编写你自己的类string,而不会与系统冲突。
Objective-C是C的超集,但它不包含名称空间,出于同样的原因,所有的系统类都被预先加了NS或其他一些奇怪的preffix。
这和所有DirectX类是如何在D3D中预先定义的以及所有的OpenGL类是如何用gl预先定义的一样。
这意味着你不应该使用NS命名你自己的类,当你看到核心animation中的NS , CA或者Core Graphics中的CG时 ,你就会明白这是对系统框架的调用。
Swift改变了这个约定,因为Swift支持命名空间,它将像String这样的核心types映射到NS等价物。
下一步。 这是从NeXT创buildobjective-c编写nextstep(后来的os x)和所有关联的应用程序等等的保留。它们表示不是原始C基础的一部分的元素,例如,没有“string” C中的元素,所以在Objective-C中,它是一个额外的基础元素“NSString”。