ios - 規約 - objective-c 命名規則




NSプレフィックスは何を意味しますか? (7)

Cocoa / Cocoa Touchの多くのクラスには、NSプリフィックスが付いています。 どういう意味ですか?


次の一歩。 これは、next-step(後でos x)や関連するすべてのアプリなどを書くためにNeXTによって作成されたobjective-cからのホールドオーバーです。これらは元のCの基底に含まれない要素を表します。たとえば、 'string' Cの要素であるため、objective-cでは、それは追加の基礎要素 'NSString'です。


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

ヒストリカル・ノート:なぜあなたが遭遇するクラスの多くがNSプレフィックスを持っているのか疑問に思うなら、これはCocoaとCocoa Touchの過去の歴史のためです。 Cocoaは、NeXTStepオペレーティングシステム用のアプリケーションを構築するために使用された収集されたフレームワークとしての生活を始めました。 Appleが1996年にNeXTを購入したとき、NeXTStepの多くは既存のクラス名を含むOS Xに組み込まれました。 Cocoa Touchは、iOSと同等のCocoaとして導入されました。 CocoaとCocoa Touchの両方で利用できるクラスもありますが、各プラットフォーム固有のクラスも多数存在します。 NSやUIのような2文字のプレフィックス(iOSのユーザーインターフェイス要素用)は、Appleが使用するために予約されています。

出典: Objective-Cによるプログラミング


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


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の遺産に由来します。


あなたが求めている人に応じて、NEXTT S TEPまたはNEXTTSTEP / SUN。

Sunはしばらくの間、OpenStepにかなり大きな投資をしていました。 Sunが写真の中に入る前に、たとえそれが基礎として知られていなかったとしても、 N e X Tの前にNXが付いていました。そしてSunが写真を入力する直前に、すべてがNSに改名されました。 SはSunのために立っていなかった可能性が高いが、サンが一般的な合意を踏んだ後、Sunが彼らの関与を尊重することが立っていた。

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


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

これらの異なる名前は実際にはかなり混乱しています(特に名前の大文字と小文字が異なるだけなので)

合併のオープン・ステップ・コンフュージョン


基本的にNSはAppleがNextを買収したときにMac OS Xになった元のオペレーティングシステムであるN ext S TEPから来ています。

私は何か他のことを説明したいと思うので、これが必要です。

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

これがstd :: stringを持つ理由です。

名前空間は使用されるので、間違いを作るのは難しく、システムクラスと矛盾することなく独自のクラス文字列を書くことができます。

Objective-CはCのスーパーセットですが、ネームスペースは含まれていません。同様の理由から、すべてのシステムクラスの上にNSやその他の奇妙なプリフィックスがプリフィックスされています。

このことは、すべてのDirectXクラスがD3Dでどのようにプリフィックスされているか、そしてどのようにすべてのOpenGLクラスにglがプリフィックスされているかと同じです。

つまり、独自のクラスにNSを使用してはいけません。コアアニメーションではNSCA 、Core GraphicsではCGが表示されますが、これはシステムフレームワークへの呼び出しであることがわかります。

Swiftは名前空間をサポートしており、StringのようなコアタイプをNS同等物にマッピングするため、この規約を変更しています。





cocoa-touch