回答:
それはNeXTSTEP遺産からのものです。
Cocoaフレームワークの元のコードは、NeXTSTEPライブラリFoundationとAppKit(これらの名前は、AppleのCocoaフレームワークで引き続き使用されています)に由来し、NextStepエンジニアは、シンボルの前にNSを付けることを選択しました。
Objective-CはCの拡張であり、C ++のような名前空間がないため、衝突しないようにシンボルには一意のプレフィックスを付ける必要があります。これは、フレームワークで定義されたシンボルにとって特に重要です。
コードでシンボルを使用する可能性が非常に高いアプリケーションを作成している場合、これについて心配する必要はありません。ただし、他のユーザーが使用するためのフレームワークまたはライブラリを作成している場合は、シンボルに一意のプレフィックスを付ける必要があります。CocoaDevには、Cocoaコミュニティの多くの開発者が「選択した」プレフィックスをリストしたページがあります。このSOディスカッションが役立つこともあります。
N eXT S TEPまたはN eXTSTEP / S unは、質問する相手に応じて異なります。
Sunはしばらくの間、OpenStepにかなりの投資をしました。サンが写真に入る前は、ファンデーションとしてはほとんど知られていなかったものの、当時はN e X Tの代わりにNXが付いていました。サンが写真に入る直前に、すべてがNSに名前が変更されました。そのときSはおそらくSunを代表していませんでしたが、Sunが一般的な合意に踏み込んだ後、Sunが彼らの関与を尊重することを表明したということでした。
私は実際にこれについてのリファレンスを持っていましたが、現在それを見つけることができません。投稿が見つかったら、更新します。
NextStep(= NS)の遺産です。NeXTは、1985年にAppleを辞任した後にSteve Jobsが設立したコンピューター会社で、NextStepは、Obj-C言語とランタイムを備えたオペレーティングシステム(UNIXベース)でした。ライブラリとツールとともに、NextStepは後にOpenStep(NeXTがSunと共同で開発したAPIの名前でもありました)に改名され、後にCocoaになりました。
これらの異なる名前は実際にはかなり混乱します(特に、名前の一部は大文字と小文字だけが異なるため、一部の名前が異なるためです。)。説明としてこれを試してください。
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が使用するために予約されています。
(強調を追加)
Cocoaクラスは、頭字語「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オペレーティングシステムではなく)NextStep APIを定義していたときは、NXConstantStringのように、プレフィックスNXを使用していました。彼らがSunでOpenStep仕様を書いているとき(OPENSTEPオペレーティングシステムと混同しないでください)、NSObjectのようにNSプレフィックスを使用しました。
基本的に、NSはN ext S TEP から来ています。これは、AppleがNextを買収したときにMac OS Xになったオリジナルのオペレーティングシステムです。
私は何か他のことを説明したいので、それがまさにそれが必要な理由です。
C ++には名前空間があり、ほとんどすべてがstdに入ります
これがstd :: stringがある理由です。
名前空間が使用されているため、間違いを犯しにくく、システム文字列と競合することなく独自のクラス文字列を記述できます。
Objective-CはCのスーパーセットですが、名前空間は含まれていません。上記と同じ理由で、すべてのシステムクラスにはNSまたはその他の奇妙な接頭辞が付けられます。
これは、すべてのDirectXクラスにD3Dのプレフィックスを付ける方法と、すべてのOpenGLクラスにglのプレフィックスを付ける方法と同じです。
つまり、NSを使用して独自のクラスに名前を付けることはできません。コアアニメーションにNS、CA、またはコアグラフィックスにCGが表示された場合、これはシステムフレームワークの呼び出しであることを理解しています。
Swiftはネームスペースをサポートし、StringのようなコアタイプをNSの同等のものにマッピングするため、Swiftはこの規則を変更します。
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」プレフィックスを使用しました。