Cocoa/Cocoa Touch中的许多类都有NS前缀.这是什么意思?
Cocoa框架的原始代码来自NeXTSTEP库Foundation和AppKit(这些名称仍由Apple的Cocoa框架使用),NextStep工程师选择在其符号前加上NS.
因为Objective-C是C的扩展,因此没有C++中的命名空间,所以符号必须以唯一的前缀为前缀,以便它们不会发生冲突.这对于框架中定义的符号尤为重要.
如果您正在编写应用程序,以便您的代码只能使用您的符号,则不必担心这一点.但是,如果您正在编写框架或库以供其他人使用,您还应该在符号前面加上唯一的前缀.CocoaDev有一个页面,Cocoa社区中的许多开发人员都列出了他们的"选择"前缀.您可能还会发现此SO讨论很有帮助.
这是来自NeXTSTEP的遗产.
N eXT S TEP或N eXTSTEP/S取决于您的要求.
Sun暂时对OpenStep进行了大量投资.前太阳进入画面大多数事情的基础上,即使它不知道为基础回去以后,被前缀NX,为ñ ē X T,并且有时太阳进入之前的图片都被重命名为NS.在小号很可能没有代表太阳,然后,但太阳在普遍共识加强后,它主张太阳履行它们的参与.
我实际上有一个参考,但我现在找不到它.如果/我再次找到它,我会更新帖子.
它是NextStep(= NS)的遗产.NeXT是史蒂夫乔布斯在1985年退出苹果公司后成立的计算机公司,而NextStep是它的操作系统(基于UNIX)以及Obj-C语言和运行时.与它的库和工具一起,NextStep后来被重命名为OpenStep(它也是NeXT与Sun共同开发的API的名称),后来又成为Cocoa.
这些不同的名称实际上非常令人困惑(特别是因为一些名称只有大小写字母大小不同...),请尝试以下解释:
TheMerger OpenstepConfusion
来自Apple的开发人员文档:
历史记录:如果你想知道为什么你遇到的这么多类有一个NS前缀,那是因为Cocoa和Cocoa Touch的过去历史.Cocoa以收集的框架开始,用于为NeXTStep操作系统构建应用程序.当Apple在1996年购买NeXT时,很多NeXTStep都被整合到OS X中,包括现有的类名.Cocoa Touch作为iOS的等同于Cocoa而被引入; Cocoa和Cocoa Touch都提供了一些类,但每个平台也有大量独特的类.两个字母的前缀如NS和UI(适用于iOS上的用户界面元素)保留供Apple使用.
来源:使用Objective-C编程
来自Cocoa_(API)维基百科:
(重点补充)
Cocoa类以首字母缩写"NS"开头(代表 NeXT-Sun创建OpenStep,或者代表OpenStep框架的原始专有术语,NeXTSTEP):NSString,NSArray等.
Foundation Kit,或更常见的Foundation,首先出现在 OpenStep中.在Mac OS X上,它基于Core Foundation.Foundation是一个通用的面向对象的库,提供字符串和值操作,容器和迭代,分布式计算,运行循环以及其他与图形用户界面无直接关系的函数.用于框架中所有类和常量的"NS"前缀来自Cocoa的OPENSTEP遗产,它由NeXT和Sun联合开发.
当NeXT定义NextStep API(而不是NEXTSTEP操作系统)时,他们使用前缀NX,如在NXConstantString中.当他们用Sun编写OpenStep规范时(不要与OPENSTEP操作系统混淆),他们使用NS前缀,就像在NSObject中一样.
基本上NS来自N ext S TEP,这是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等价物.
应该知道的 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年之前使用,Apple的文档说:
官方OpenStep API于1994年9月发布,是第一个在Foundation和Application Kit之间拆分API的公司,也是第一个使用"NS"前缀的API.