Was bedeutet das NS-Präfix?

579

Viele Klassen in Cocoa / Cocoa Touch haben das NS-Präfix. Was bedeutet das?

Martin08
quelle

Antworten:

456

Es ist aus dem NeXTSTEP- Erbe.

Olaf Kock
quelle
7
... oder vielleicht das NeXT / Sun-Erbe (Sun war Teilnehmer am OpenStep-Konsortium)
Barry Wark
27
Ja natürlich. In den anderen Antworten ist alles wunderschön dargestellt, deshalb habe ich mir nicht die Mühe gemacht, diese Informationen in meine zu kopieren. Tut mir leid, wenn das jemanden beleidigt - es macht mir nichts aus, wenn sich die akzeptierte Antwort in eine der anderen ändert (wenn das möglich ist - habe das nie überprüft).
Olaf Kock
2
Ich würde gerne mehr sehen, aber den Link zu NeXTSTEP
Bagrat Kirakosian
784

Der ursprüngliche Code für die Cocoa-Frameworks stammt von der NeXTSTEP- Bibliothek Foundation und AppKit (diese Namen werden immer noch von Apples Cocoa-Frameworks verwendet), und die NextStep-Ingenieure haben beschlossen, ihren Symbolen NS voranzustellen.

Da Objective-C eine Erweiterung von C ist und daher keine Namespaces wie in C ++ hat, muss Symbolen ein eindeutiges Präfix vorangestellt werden, damit sie nicht kollidieren. Dies ist besonders wichtig für Symbole, die in einem Framework definiert sind.

Wenn Sie eine Anwendung schreiben, sodass Ihr Code wahrscheinlich immer nur Ihre Symbole verwendet, müssen Sie sich darüber keine Gedanken machen. Wenn Sie jedoch ein Framework oder eine Bibliothek für andere Benutzer schreiben, sollten Sie Ihren Symbolen auch ein eindeutiges Präfix voranstellen. CocoaDev hat eine Seite, auf der viele Entwickler in der Cocoa-Community ihre "ausgewählten" Präfixe aufgelistet haben. Möglicherweise finden Sie diese SO-Diskussion auch hilfreich.

Barry Wark
quelle
150

N eXT S TEP oder N eXTSTEP / S un je nachdem, wen Sie fragen.

Sun hatte eine Zeit lang eine ziemlich große Investition in OpenStep. Bevor Sun das Bild betrat, wurde den meisten Dingen in der Stiftung, obwohl sie damals nicht als Stiftung bekannt war, NX für N e X T vorangestellt , und kurz bevor Sun das Bild betrat, wurde alles in NS umbenannt . Das S stand damals höchstwahrscheinlich nicht für Sun, aber nachdem Sun in den allgemeinen Konsens eingetreten war, war es für Sun, ihre Beteiligung zu ehren.

Ich hatte tatsächlich eine Referenz dafür, aber ich kann sie momentan nicht finden. Ich werde den Beitrag aktualisieren, wenn ich ihn wieder finde.

David Holm
quelle
4
Ich habe die gleiche Geschichte aus einer sehr zuverlässigen Quelle gehört. Ich bin mir ziemlich sicher, dass dies hier die genaueste Antwort ist.
Tyler
2
Ich fand eine Referenz: cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html
Simon Woodside
@ SimonWoodside Link ist tot.
Dinsdale
53

Es ist das Erbe von NextStep (= NS). NeXT war die Computerfirma, die Steve Jobs gründete, nachdem er Apple 1985 verlassen hatte, und NextStep war das Betriebssystem (UNIX-basiert) zusammen mit der Obj-C-Sprache und der Laufzeit. Zusammen mit seinen Bibliotheken und Tools wurde NextStep später in OpenStep umbenannt (was auch der Name einer API war, die NeXT zusammen mit Sun entwickelte), die später zu Cocoa wurde.

Diese verschiedenen Namen sind eigentlich ziemlich verwirrend (zumal sich einige der Namen nur darin unterscheiden, welche Zeichen in Groß- oder Kleinbuchstaben geschrieben sind). Versuchen Sie dies zur Erklärung:

TheMerger OpenstepConfusion

Gregor
quelle
4
Ich hätte schwören können, dass Apple ihn aus verschiedenen Gründen gefeuert hat.
Fund Monica Klage
43

Aus Apples Entwicklerdokumenten:

Historischer Hinweis: Wenn Sie sich fragen, warum so viele der Klassen, denen Sie begegnen, ein NS-Präfix haben, liegt dies an der Vergangenheit von Cocoa und Cocoa Touch. Cocoa begann sein Leben als die gesammelten Frameworks, mit denen Apps für das NeXTStep-Betriebssystem erstellt wurden. Als Apple 1996 NeXT kaufte, wurde ein Großteil von NeXTStep in OS X integriert, einschließlich der vorhandenen Klassennamen. Cocoa Touch wurde als iOS-Äquivalent zu Cocoa eingeführt. Einige Klassen sind sowohl in Cocoa als auch in Cocoa Touch verfügbar. Es gibt jedoch auch eine große Anzahl von Klassen, die für jede Plattform einzigartig sind. Präfixe aus zwei Buchstaben wie NS und UI (für Benutzeroberflächenelemente unter iOS) sind für die Verwendung durch Apple reserviert.

Quelle: Programmierung mit Objective-C

Jonathan Lin
quelle
23

Aus Cocoa_ (API) Wikipedia :

(Betonung hinzugefügt)

Kakaoklassen beginnen mit dem Akronym "NS" (steht entweder für die NeXT-Sun-Erstellung von OpenStep oder für den ursprünglichen proprietären Begriff für das OpenStep-Framework NeXTSTEP ): NSString, NSArray usw.

Foundation Kit , oder besser gesagt Foundation , erschien zuerst in OpenStep . Unter Mac OS X basiert es auf Core Foundation. Foundation ist eine generische objektorientierte Bibliothek, die die Manipulation von Zeichenfolgen und Werten, Container und Iteration, verteiltes Rechnen, Ausführungsschleifen und andere Funktionen bietet, die nicht direkt mit der grafischen Benutzeroberfläche verbunden sind. Das Präfix "NS" , das für alle Klassen und Konstanten im Framework verwendet wird, stammt aus dem OPENSTEP-Erbe von Cocoa, das von NeXT und Sun gemeinsam entwickelt wurde .

chown
quelle
Wikipedia ist hier falsch. Foundation Kit wurde erstmals in Enterprise Objects Framework vor OpenStep veröffentlicht. Übrigens basierte die NeXT-Version von Foundation angeblich auf einer CoreFoundation-ähnlichen C-API, die jedoch erst unter Mac OS X als öffentliche Schnittstelle
@ user23743, ich glaube nicht, dass du richtig bist. EOF ist älter als das Betriebssystem OPENSTEP, nicht jedoch die OpenStep-API. Die EOF-Dokumentation, auf die Sie direkt verlinkt haben (verweist auf OpenStep) [ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/… , und beide wurden 1994 veröffentlicht.
AriX
12

Als NeXT die NextStep-API definierte (im Gegensatz zum NEXTSTEP-Betriebssystem), wurde das Präfix NX wie in NXConstantString verwendet. Beim Schreiben der OpenStep-Spezifikation mit Sun (nicht zu verwechseln mit dem OPENSTEP-Betriebssystem) wurde das NS-Präfix wie in NSObject verwendet.


quelle
10

Grundsätzlich stammt NS von N ext S TEP, dem ursprünglichen Betriebssystem, das zu Mac OS X wurde, als Apple Next übernahm.

Ich möchte etwas anderes erklären und deshalb wird es genau benötigt.

In C ++ gibt es Namespaces und fast alles geht in std

Deshalb haben Sie std :: string.

Namespaces werden verwendet, sodass es für Sie schwieriger ist, einen Fehler zu machen, und Sie können Ihre eigene Klassenzeichenfolge schreiben, ohne mit der Systemzeichenfolge in Konflikt zu geraten.

Objective-C ist eine Obermenge von C, enthält jedoch keine Namespaces. Aus dem gleichen Grund wird allen Systemklassen vor allem NS oder ein anderes seltsames Präfix vorangestellt.

Dies gilt auch für die Präfixierung aller DirectX-Klassen mit D3D und für die Präfixierung aller OpenGL-Klassen mit gl .

Dies bedeutet, dass Sie NS nicht verwenden sollten, um Ihre eigenen Klassen zu benennen. Wenn Sie NS , CA in Core Animation oder CG in Core Graphics sehen, verstehen Sie, dass dies ein Aufruf eines Systemframeworks ist.

Swift ändert diese Konvention, da Swift den Namespace unterstützt und seine Kerntypen wie String den NS-Äquivalenten zuordnet.

Daniel Georgiev
quelle
6

Bill Bumgarner aka @bbum, der es wissen sollte , hat 2005 auf der CocoaBuilder-Mailingliste gepostet :

Sun betrat das Bild ein wenig, nachdem das NS-Präfix ins Spiel gekommen war. Das NS-Präfix wurde in öffentlichen APIs beim Wechsel von NeXTSTEP 3.0 zu NeXTSTEP 4.0 (auch als OpenStep bezeichnet) verwendet. Vor 4.0 verwendeten eine Handvoll Symbole das NX-Präfix, aber die meisten von den Systembibliotheken bereitgestellten Klassen hatten überhaupt kein Präfix - Liste, Hashtabelle, Ansicht usw.

Es scheint, dass alle zustimmen, dass das Präfix NX (für NeXT) bis 1993/1994 verwendet wurde, und Apples Dokumente sagen :

Die offizielle OpenStep-API, die im September 1994 veröffentlicht wurde, war die erste, die die API zwischen Foundation und Application Kit aufteilte, und die erste, die das Präfix „NS“ verwendete.

Simon Woodside
quelle