【问题标题】:What does the NS prefix mean?NS前缀是什么意思?
【发布时间】:2010-10-03 04:36:14
【问题描述】:

Cocoa/Cocoa Touch 中的许多类都有 NS 前缀。什么意思?

【问题讨论】:

  • 我更愿意相信它的意思是“命名空间”????

标签: ios objective-c cocoa cocoa-touch terminology


【解决方案1】:

Cocoa 框架的原始代码来自 NeXTSTEP 库 Foundation 和 AppKit(Apple 的 Cocoa 框架仍然使用这些名称),NextStep 工程师选择在其符号前加上 NS。

由于 Objective-C 是 C 的扩展,因此没有像 C++ 中那样的命名空间,因此符号必须以唯一的前缀作为前缀,这样它们就不会发生冲突。这对于在框架中定义的符号尤为重要。

如果您正在编写一个应用程序,这样您的代码可能只会使用您的符号,您不必担心这一点。但是,如果您正在编写供他人使用的框架或库,您还应该为您的符号添加一个唯一前缀。 CocoaDev has a page Cocoa 社区中的许多开发人员列出了他们的“选择”前缀。您可能还会发现 this SO discussion 很有帮助。

【讨论】:

    【解决方案2】:

    来自NeXTSTEP 遗产。

    【讨论】:

    • ...或者可能是 NeXT/Sun 的遗产(Sun 是 OpenStep 联盟的参与者)
    • 是的,当然。这一切都在其他答案中得到了很好的阐述,这就是为什么我没有费心将这些信息复制到我的。抱歉,如果这冒犯了某人 - 我不介意接受的答案是否更改为其他答案之一(如果可能的话 - 从未检查过)。
    • 我想看到更多,但链接到 NeXTSTEP
    【解决方案3】:

    NeXTSTEP 或 NeXTSTEP/Sun 取决于您询问的对象。 p>

    一段时间以来,Sun 对 OpenStep 进行了相当大的投资。在 Sun 进入图片之前,基金会中的大多数东西,即使它当时不被称为基金会,也是前缀 NX,代表 NeXT,在 Sun 进入图片之前的某个时候,所有东西都被重命名为 NSS 很可能当时并不代表 Sun,但在 Sun 介入之后,普遍的共识是它代表 Sun 以尊重他们的参与。

    我实际上对此有一个参考,但我现在找不到它。如果/当我再次找到它时,我会更新帖子。

    【讨论】:

    【解决方案4】:

    这是 NextStep (= NS) 的遗产。 NeXT 是史蒂夫乔布斯在 1985 年离开苹果后成立的计算机公司,NextStep 是它的操作系统(基于 UNIX)以及 Obj-C 语言和运行时。连同它的库和工具,NextStep 后来更名为 OpenStep(这也是 NeXT 与 Sun 共同开发的 API 上的名称),后来又成为 Cocoa。

    这些不同的名称实际上是相当混乱的(特别是因为有些名称的不同之处仅在于字符是大写还是小写..),请尝试以下解释:

    TheMerger OpenstepConfusion

    【讨论】:

    • 我本可以发誓苹果公司出于各种原因解雇了他。
    • @Nic Jobs 在与 Sculley 的权力斗争失败后于 85 年 9 月辞职。
    【解决方案5】:

    来自 Apple 的开发者文档:

    历史记录:如果你想知道为什么你遇到的这么多类都有一个 NS 前缀,那是因为 Cocoa 和 Cocoa Touch 的过去历史。 Cocoa 最初是作为用于为 NeXTStep 操作系统构建应用程序的收集框架而诞生的。当 Apple 在 1996 年收购 NeXT 时,NeXTStep 的大部分内容都并入了 OS X,包括现有的类名。 Cocoa Touch 是作为 Cocoa 的 iOS 版本引入的;一些类在 Cocoa 和 Cocoa Touch 中都可用,尽管每个平台也有大量独特的类。 NS 和 UI(用于 iOS 上的用户界面元素)之类的两个字母前缀供 Apple 使用。

    来源:Programming with Objective-C

    【讨论】:

      【解决方案6】:

      基本上NS来自NextSTEP,这是苹果收购Next时成为Mac OS X的原始操作系统。

      我想解释一些别的东西,这就是为什么需要它。

      在 C++ 中有命名空间,几乎所有东西都放在 std

      这就是你有 std::string 的原因。

      使用了命名空间,因此您更难出错,并且您可以编写自己的类字符串而不会与系统冲突。

      Objective-C 是 C 的超集,但它不包括命名空间,出于同样的原因,所有系统类都以 NS 或其他一些奇怪的前缀作为前缀。

      这与所有DirectX类如何以D3D为前缀以及所有OpenGL类如何以gl为前缀是相同的。

      这意味着你不应该使用 NS 来命名你自己的类,并且当你在 Core Animation 中看到 NSCA >CG 在 Core Graphics 中你明白这是对系统框架的调用。

      Swift 改变了这种约定,因为 Swift 支持命名空间,并且它将其核心类型(如 String)映射到 NS 等价物。

      【讨论】:

        【解决方案7】:

        来自Cocoa_(API) Wikipedia

        (强调)

        Cocoa 类以首字母缩略词 "NS" 开头(代表 NeXT-Sun 创建的 OpenStep,或为原始专有术语 对于 OpenStep 框架,NeXTSTEP):NSString、NSArray 等

        Foundation Kit,或更常见的简称 Foundation,首次出现在 OpenStep。在 Mac OS X 上,它基于 Core Foundation。基金会是一个 提供字符串和值的通用面向对象库 操作、容器和迭代、分布式计算、运行 循环和其他不直接绑定到图形的功能 用户界面。 “NS”前缀,用于所有类和常量 该框架来自 Cocoa 的 OPENSTEP 遗产,该遗产是联合 由 NeXTSun 开发。

        【讨论】:

        • 维基百科在这里是错误的。 Foundation Kit first appeared in Enterprise Objects Framework,早于 OpenStep。顺便说一句,Foundation 的 NeXT 版本据说是基于类似 CoreFoundation 的 C API,但直到 Mac OS X 才公开为公共接口。
        • @user23743,我不认为你是正确的。 EOF 早于 OPENSTEP 操作系统,但不早于 OpenStep API。您直接链接到的 EOF 文档(参考 OpenStep)[cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/…,它们都于 1994 年发布。
        【解决方案8】:

        当 NeXT 定义 NextStep API(相对于 NEXTSTEP 操作系统)时,他们使用前缀 NX,就像在 NXConstantString 中一样。当他们使用 Sun 编写 OpenStep 规范时(不要与 OPENSTEP 操作系统混淆),他们使用 NS 前缀,就像在 NSObject 中一样。

        【讨论】:

          【解决方案9】:

          Bill Bumgarner aka @bbum, who should know,张贴在CocoaBuilder mailing list in 2005

          在 NS 前缀开始发挥作用之后,Sun 进入了画面。在从 NeXTSTEP 3.0 迁移到 NeXTSTEP 4.0(也称为 OpenStep)期间,NS 前缀出现在公共 API 中。在 4.0 之前,一个 少数符号使用 NX 前缀,但大多数类由 系统库根本没有前缀——列表、哈希表、 查看等...

          似乎每个人都同意前缀 NX(代表 NeXT)一直使用到 1993/1994 年,而Apple's docs say

          1994 年 9 月发布的官方 OpenStep API 是第一个在 Foundation 和 Application Kit 之间拆分 API 并且第一个使用“NS”前缀的 API。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-12
            • 1970-01-01
            • 1970-01-01
            • 2017-11-29
            • 2010-10-15
            相关资源
            最近更新 更多