Cocoa/Cocoa Touch中的许多类都有NS前缀。这是什么意思?
当前回答
它来自NeXTSTEP传统。
其他回答
它来自NeXTSTEP传统。
Cocoa框架的原始代码来自NeXTSTEP库基金会和AppKit(这些名称仍然被苹果的Cocoa框架使用),NeXTSTEP的工程师选择用NS作为他们的符号前缀。
因为Objective-C是C的扩展,因此不像c++那样有名称空间,符号必须有一个唯一的前缀,这样它们就不会发生冲突。这对于在框架中定义的符号尤为重要。
如果您正在编写一个应用程序,以便您的代码可能只使用您的符号,那么您不必担心这个问题。但是如果您正在编写供他人使用的框架或库,您还应该为您的符号添加一个唯一的前缀。CocoaDev有一个页面,许多Cocoa社区的开发人员列出了他们“选择”的前缀。您可能也会发现这个SO讨论很有帮助。
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等等物。
它是NextStep (= NS)遗产。NeXT是乔布斯1985年离开苹果公司后成立的电脑公司,NextStep是它的操作系统(基于UNIX)以及Obj-C语言和运行时。NextStep连同它的库和工具,后来被重新命名为OpenStep(这也是NeXT和Sun一起开发的API上的名字),后来又变成了Cocoa。
这些不同的名字实际上很让人困惑(特别是因为有些名字只在字符是大写或小写时才不同..),尝试下面的解释:
TheMerger OpenstepConfusion
NeXTSTEP或NeXTSTEP/Sun取决于你问的是谁。
有一段时间,Sun在OpenStep上有相当大的投资。在Sun加入之前,基金会中的大多数东西,尽管当时还不叫基金会,前缀都是NX,代表NeXT,在Sun加入之前的某个时候,所有东西都被重命名为NS。S很可能并不代表Sun,但在Sun加入后,人们普遍认为它代表Sun,以纪念他们的参与。
实际上我有一个参考资料,但我现在找不到。如果/当我再次找到它时,我会更新这篇文章。
推荐文章
- 如何更改导航栏上“后退”按钮的标题
- 有没有办法从UITableView中移除分隔线?
- 如何在Objective-C中声明类级属性?
- 我如何获得iOS 7默认的蓝色编程?
- UITapGestureRecognizer破坏UITableView didSelectRowAtIndexPath
- 在Objective-C中@property保留,赋值,复制,非原子
- 6.5英寸屏幕的App store截图大小是多少?
- 我如何在NSAttributedString中创建一个可点击的链接?
- iOS测试/规格TDD/BDD以及集成和验收测试
- BASE术语解释
- 停止UIWebView垂直“弹跳”?
- 启动屏幕故事板不显示图像
- 对未渲染的视图进行快照,结果是一个空快照
- 是否可以为iPhone应用程序(如YouTube和地图)注册一个基于http+域的URL方案?
- 模拟器错误fbssystemservicdomain代码4