Cocoa/Cocoa Touch中的许多类都有NS前缀。这是什么意思?
当前回答
NeXTSTEP或NeXTSTEP/Sun取决于你问的是谁。
有一段时间,Sun在OpenStep上有相当大的投资。在Sun加入之前,基金会中的大多数东西,尽管当时还不叫基金会,前缀都是NX,代表NeXT,在Sun加入之前的某个时候,所有东西都被重命名为NS。S很可能并不代表Sun,但在Sun加入后,人们普遍认为它代表Sun,以纪念他们的参与。
实际上我有一个参考资料,但我现在找不到。如果/当我再次找到它时,我会更新这篇文章。
其他回答
当NeXT定义NextStep API(与NextStep操作系统相反)时,他们使用了前缀NX,如NXConstantString。当他们使用Sun(不要与OpenStep操作系统混淆)编写OpenStep规范时,他们使用了NS前缀,就像在NSObject中一样。
Bill Bumgarner又名@bbum,谁应该知道,他在2005年的CocoaBuilder邮件列表上写道:
Sun是在NS前缀开始发挥作用之后才进入的。NS前缀出现在从NeXTSTEP 3.0到NeXTSTEP 4.0(也称为OpenStep)的公共api中。4.0之前,a 少数符号使用NX前缀,但大多数类提供 系统库根本没有前缀——List, Hashtable, 看来,等等……
似乎每个人都同意,NX (NeXT)这个前缀在1993/1994年之前一直被使用,苹果的文档中写道:
1994年9月发布的官方OpenStep API是第一个将API分离为Foundation和Application Kit的API,并且第一个使用“NS”前缀的API。
它是NextStep (= NS)遗产。NeXT是乔布斯1985年离开苹果公司后成立的电脑公司,NextStep是它的操作系统(基于UNIX)以及Obj-C语言和运行时。NextStep连同它的库和工具,后来被重新命名为OpenStep(这也是NeXT和Sun一起开发的API上的名字),后来又变成了Cocoa。
这些不同的名字实际上很让人困惑(特别是因为有些名字只在字符是大写或小写时才不同..),尝试下面的解释:
TheMerger OpenstepConfusion
NS基本上来自NextSTEP,这是苹果收购Next时最初的操作系统,后来成为Mac OS X。
我想解释一些其他的东西,这就是为什么需要它。
在c++中有命名空间,几乎所有的东西都放在std中
这就是为什么要使用std::string。
使用名称空间,这样就不会出错,而且可以编写自己的类字符串,而不会与系统字符串冲突。
Objective-C是C的超集,但它不包括命名空间,出于同样的原因,所有系统类都以NS或其他奇怪的前缀作为前缀。
这与所有DirectX类都以D3D为前缀,以及所有OpenGL类都以gl为前缀是一样的。
这意味着你不应该使用NS来命名你自己的类,当你在Core Animation中看到NS, CA或在Core Graphics中看到CG时,你就知道这是对系统框架的调用。
Swift改变了这一惯例,因为Swift支持命名空间,并将其核心类型(如String)映射到NS等等物。
苹果的开发者文档如下:
Historical Note: If you’re wondering why so many of the classes you encounter have an NS prefix, it’s because of the past history of Cocoa and Cocoa Touch. Cocoa began life as the collected frameworks used to build apps for the NeXTStep operating system. When Apple purchased NeXT back in 1996, much of NeXTStep was incorporated into OS X, including the existing class names. Cocoa Touch was introduced as the iOS equivalent of Cocoa; some classes are available in both Cocoa and Cocoa Touch, though there are also a large number of classes unique to each platform. Two-letter prefixes like NS and UI (for User Interface elements on iOS) are reserved for use by Apple.
来源:使用Objective-C编程
推荐文章
- 如何停止不必要的UIButton动画标题变化?
- 是否有可能更新一个本地化的故事板的字符串?
- 以编程方式获取Bundle Identifier
- 为iPad和iPhone设计输入按钮
- 如何在我的iPhone应用程序中使用NSError ?
- 我的预发行应用已经在iTunes Connect中“处理”了一周多,这是怎么回事?
- Xcode iOS项目只显示“我的Mac 64位”,但不显示模拟器或设备
- Objective-C中的自动引用计数不能防止或减少什么样的泄漏?
- 在Xcode 9中如何从打开的多个模拟器中退出或关闭单个模拟器?
- 如何使用Swift播放声音?
- UINavigationBar自定义返回按钮没有标题
- 如何精确地以毫秒为单位记录方法的执行时间?
- 在整个UIWindow中获取UIView的位置
- 如何解散ViewController在Swift?
- 保存字符串到NSUserDefaults?