Answers:
它来自NeXTSTEP的传承。
Cocoa框架的原始代码来自NeXTSTEP库Foundation和AppKit(这些名称仍被Apple的Cocoa框架使用),而NextStep工程师选择在其符号前加上NS。
因为Objective-C是C的扩展,因此没有像C ++中那样的名称空间,所以必须在符号前面加上唯一的前缀,以免符号冲突。这对于框架中定义的符号特别重要。
如果您正在编写应用程序,以使您的代码仅可能使用符号,则不必为此担心。但是,如果您要编写供他人使用的框架或库,则还应在符号前面加上唯一的前缀。CocoaDev有一个页面,可可社区中的许多开发人员都列出了他们的“选择”前缀。您可能还会发现此SO讨论很有帮助。
这是NextStep(= NS)的遗产。NeXT是史蒂夫·乔布斯(Steve Jobs)于1985年离开苹果后成立的计算机公司,而NextStep是它的操作系统(基于UNIX)以及Obj-C语言和运行时。连同其库和工具,NextStep后来更名为OpenStep(这也是NeXT与Sun一起开发的API上的名称),后来又变成了Cocoa。
这些不同的名称实际上是很令人困惑的(特别是由于某些名称仅在大写或小写字符方面有所不同。),请尝试以下方式进行解释:
来自苹果的开发人员文档:
历史注释:如果您想知道为什么遇到的这么多类都带有NS前缀,那是由于Cocoa和Cocoa Touch的历史。Cocoa最初是作为收集的用于为NeXTStep操作系统构建应用程序的框架而诞生的。当苹果公司在1996年购买NeXT时,许多NeXTStep被合并到OS X中,包括现有的类名。Cocoa Touch作为iOS的Cocoa引入。尽管在每个平台上都有大量独特的类,但在Cocoa和Cocoa Touch中都提供了一些类。保留NS和UI之类的两个字母的前缀(用于iOS上的用户界面元素)供Apple使用。
(强调)
可可类以首字母缩写“ NS”开头(代表OpenStep的 NeXT-Sun创建,或代表OpenStep框架的原始专有术语NeXTSTEP):NSString,NSArray等。
Foundation Kit,或更简单的说是Foundation,首先出现在 OpenStep中。在Mac OS X上,它基于Core Foundation。Foundation是一个通用的面向对象的库,提供字符串和值操作,容器和迭代,分布式计算,运行循环以及其他与图形用户界面没有直接联系的功能。该框架中所有类和常量使用的“ NS”前缀来自NeXT和Sun共同开发的Cocoa的OPENSTEP传统。
当NeXT定义NextStep API(与NEXTSTEP操作系统相对)时,他们使用NXConstantString中的前缀NX。当他们使用Sun编写OpenStep规范时(不要与OPENSTEP操作系统混淆),他们使用NS前缀,就像在NSObject中一样。
基本上,NS来自N ext S TEP,这是苹果收购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 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”前缀的人。