NS接頭辞とはどういう意味ですか?


回答:


456

それはNeXTSTEP遺産からのものです。


7
...またはおそらくNeXT / Sunの遺産(SunはOpenStepコンソーシアムに参加していた)
Barry Wark

27
はい、もちろん。それはすべて他の回答で美しくレイアウトされています。そのため、私はわざわざその情報を私のものにコピーしませんでした。それが誰かの気分を害する場合は申し訳ありません-受け入れられた回答が他の回答の1つに変更されてもかまいません(可能な場合は確認しないでください)。
Olaf Kock 2012

2
もっと見たいのですが、NeXTSTEPへのリンク
Bagrat Kirakosian

784

Cocoaフレームワークの元のコードは、NeXTSTEPライブラリFoundationとAppKit(これらの名前は、AppleのCocoaフレームワークで引き続き使用されています)に由来し、NextStepエンジニアは、シンボルの前にNSを付けることを選択しました。

Objective-CはCの拡張であり、C ++のような名前空間がないため、衝突しないようにシンボルには一意のプレフィックスを付ける必要があります。これは、フレームワークで定義されたシンボルにとって特に重要です。

コードでシンボルを使用する可能性が非常に高いアプリケーションを作成している場合、これについて心配する必要はありません。ただし、他のユーザーが使用するためのフレームワークまたはライブラリを作成している場合は、シンボルに一意のプレフィックスを付ける必要があります。CocoaDevには、Cocoaコミュニティの多くの開発者が「選択した」プレフィックスをリストしたページがありますこのSOディスカッションが役立つこともあります。


150

N eXT S TEPまたはN eXTSTEP / S unは、質問する相手に応じて異なります。

Sunはしばらくの間、OpenStepにかなりの投資をしました。サンが写真に入る前は、ファンデーションとしてはほとんど知られていなかったものの、当時はN e X Tの代わりにNXが付いていました。サンが写真に入る直前に、すべてがNSに名前が変更されました。そのときSはおそらくSunを代表していませんでしたが、Sunが一般的な合意に踏み込んだ後、Sunが彼らの関与を尊重することを表明したということでした。

私は実際にこれについてのリファレンスを持っていましたが、現在それを見つけることができません。投稿が見つかったら、更新します。


4
私は非常に信頼できる情報源から同じ話を聞きました。これがここで最も正確な答えだと確信しています。
タイラー


@SimonWoodsideリンクは死んでいます。
Dinsdale


53

NextStep(= NS)の遺産です。NeXTは、1985年にAppleを辞任した後にSteve Jobsが設立したコンピューター会社で、NextStepは、Obj-C言語とランタイムを備えたオペレーティングシステム(UNIXベース)でした。ライブラリとツールとともに、NextStepは後にOpenStep(NeXTがSunと共同で開発したAPIの名前でもありました)に改名され、後にCocoaになりました。

これらの異なる名前は実際にはかなり混乱します(特に、名前の一部は大文字と小文字だけが異なるため、一部の名前が異なるためです。)。説明としてこれを試してください。

TheMerger OpenstepConfusion


4
アップルが彼を解雇したとは、さまざまな理由で私に誓ったかもしれない。
モニカの訴訟に資金

43

Appleの開発者ドキュメントから:

歴史的注記:出会うクラスの多くにNS接頭辞が付いている理由が不思議に思っているのは、CocoaとCocoa Touchの過去の歴史が原因です。Cocoaは、収集されたフレームワークがNeXTStepオペレーティングシステム用のアプリを構築するために使用されることから始まりました。Appleが1996年にNeXTを購入したとき、既存のクラス名を含め、NeXTStepの多くがOS Xに組み込まれていました。Cocoa Touchは、CocoaのiOS版として導入されました。一部のクラスは、CocoaとCocoa Touchの両方で使用できますが、各プラットフォームに固有のクラスも多数あります。NSやUI(iOSのユーザーインターフェイス要素用)などの2文字のプレフィックスは、Appleが使用するために予約されています。

出典:Objective-Cを使用したプログラミング


23

Cocoa_(API)ウィキペディア

(強調を追加)

Cocoaクラスは、頭字語「NS」で始まります( OpenStepのNeXT-Sun作成、またはOpenStepフレームワークの元の独自用語であるNeXTSTEPを表します):NSString、NSArrayなど。

Foundation Kit、またはより一般的にはFoundationはOpenStepで最初に登場しました 。Mac OS Xでは、Core Foundationに基づいています。Foundationは、文字列と値の操作、コンテナーと反復、分散コンピューティング、実行ループ、およびグラフィカルユーザーインターフェイスに直接関連付けられていないその他の機能を提供する汎用オブジェクト指向ライブラリです。フレームワークのすべてのクラスと定数に使用される「NS」接頭辞はNeXTSunが共同で開発したCocoaのOPENSTEP遺産に由来します。


ウィキペディアはここで間違っています。Foundation Kit は、OpenStepより前のEnterprise Objects Frameworkに最初に登場しました。ちなみに財団の次期バージョンは、おそらくCoreFoundationのようなC APIに基づいていたが、マックOS X.までパブリックインタフェースとして公開されていなかったこと

@ user23743、私はあなたが正しいとは思わない。EOFはOPENSTEPオペレーティングシステムよりも古いものですが、OpenStep APIにはありません。直接リンクしたEOFドキュメント(OpenStepを参照)[ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/…、およびそれらは両方とも1994
。– AriX 14

12

NeXTが(NEXTSTEPオペレーティングシステムではなく)NextStep APIを定義していたときは、NXConstantStringのように、プレフィックスNXを使用していました。彼らがSunでOpenStep仕様を書いているとき(OPENSTEPオペレーティングシステムと混同しないでください)、NSObjectのようにNSプレフィックスを使用しました。


10

基本的に、NSN ext S TEP から来ています。これは、AppleがNextを買収したときにMac OS Xになったオリジナルのオペレーティングシステムです。

私は何か他のことを説明したいので、それがまさにそれが必要な理由です。

C ++には名前空間があり、ほとんどすべてがstdに入ります

これがstd :: stringがある理由です。

名前空間が使用されているため、間違いを犯しにくく、システム文字列と競合することなく独自のクラス文字列を記述できます。

Objective-CはCのスーパーセットですが、名前空間は含まれていません。上記と同じ理由で、すべてのシステムクラスにはNSまたはその他の奇妙な接頭辞が付けられます。

これは、すべてのDirectXクラスにD3Dのプレフィックスを付ける方法と、すべてのOpenGLクラスにglのプレフィックスを付ける方法と同じです。

つまり、NSを使用して独自のクラスに名前を付けることはできません。コアアニメーションにNSCA、またはコアグラフィックスにCGが表示された場合、これはシステムフレームワークの呼び出しであることを理解しています。

Swiftはネームスペースをサポートし、StringのようなコアタイプをNSの同等のものにマッピングするため、Swiftはこの規則を変更します。


6

Bill Bumgarner、別名@bbum は2005年にCocoaBuilderメーリングリストに投稿されました。

NS接頭辞が効いた後、Sunは少し前にこの問題に取り組みました。NSプレフィックスは、NeXTSTEP 3.0からNeXTSTEP 4.0(OpenStepとしても知られている)への移行中にパブリックAPIで発生しました。4.0より前は、いくつかのシンボルでNX接頭辞が使用されていましたが、システムライブラリによって提供されるほとんどのクラスには、接頭辞がまったく付いていませんでした-リスト、ハッシュテーブル、ビューなど...

プレフィックスNX(NeXTの場合)が1993/1994年まで使用されたことに誰もが同意しているようで、Appleのドキュメントでは次のように述べています

1994年9月に公開された公式のOpenStep APIは、最初にFoundationとApplication Kitの間でAPIを分割し、最初に「NS」プレフィックスを使用しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.