Que signifie le préfixe NS?

579

De nombreuses classes dans Cocoa / Cocoa Touch ont le préfixe NS. Qu'est-ce que ça veut dire?

Martin08
la source

Réponses:

456

C'est de l' héritage NeXTSTEP .

Olaf Kock
la source
7
... ou peut-être l'héritage NeXT / Sun (Sun faisait partie du consortium OpenStep)
Barry Wark
27
Oui bien sûr. Tout est magnifiquement présenté dans les autres réponses, c'est pourquoi je n'ai pas pris la peine de copier ces informations dans les miennes. Désolé si cela offense quelqu'un - cela ne me dérange pas si la réponse acceptée change pour l'une des autres (si c'est possible - je n'ai jamais vérifié cela).
Olaf Kock
2
J'aimerais en voir plus mais le lien vers NeXTSTEP
Bagrat Kirakosian
784

Le code d'origine des frameworks Cocoa provenait des bibliothèques NeXTSTEP Foundation et AppKit (ces noms sont toujours utilisés par les frameworks Cocoa d'Apple), et les ingénieurs de NextStep ont choisi de préfixer leurs symboles avec NS.

Parce que Objective-C est une extension de C et n'a donc pas d'espaces de noms comme en C ++, les symboles doivent être préfixés avec un préfixe unique afin qu'ils ne se heurtent pas. Ceci est particulièrement important pour les symboles définis dans un cadre.

Si vous écrivez une application, de telle sorte que votre code n'utilisera probablement que vos symboles, vous n'avez pas à vous en préoccuper. Mais si vous écrivez un framework ou une bibliothèque à l'usage des autres, vous devez également préfixer vos symboles avec un préfixe unique. CocoaDev a une page où de nombreux développeurs de la communauté Cocoa ont répertorié leurs préfixes "choisis". Vous pouvez également trouver cette discussion SO utile.

Barry Wark
la source
150

N eXT S TEP ou N eXTSTEP / S un selon la personne à qui vous demandez.

Sun a investi assez longtemps dans OpenStep pendant un certain temps. Avant que Sun n'entre dans l'image, la plupart des choses dans la fondation, même si elle n'était pas connue à l'époque, était préfixée NX , pour N e X T, et quelque temps juste avant que Sun n'entre dans l'image, tout était renommé NS . Le S ne représentait probablement pas Sun à ce moment-là, mais après que Sun est intervenu dans le consensus général, il a voulu que Sun honore leur implication.

J'avais en fait une référence pour cela, mais je ne la trouve pas pour le moment. Je mettrai à jour le message si / quand je le retrouve.

David Holm
la source
4
J'ai entendu la même histoire d'une source très fiable; Je suis presque sûr que c'est la réponse la plus précise ici.
Tyler
2
J'ai trouvé une référence: cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html
Simon Woodside
@SimonWoodside Link est mort.
Dinsdale
Archive Internet de référence: web.archive.org/web/20151008121657/http://www.cocoabuilder.com/…
Simon Woodside
53

C'est l'héritage NextStep (= NS). NeXT était la société informatique que Steve Jobs a formée après avoir quitté Apple en 1985, et NextStep était son système d'exploitation (basé sur UNIX) avec le langage Obj-C et le runtime. Avec ses bibliothèques et ses outils, NextStep a ensuite été renommé OpenStep (qui était également le nom d'une API que NeXT a développée avec Sun), qui est devenu plus tard Cocoa.

Ces différents noms sont en fait assez déroutants (d'autant plus que certains des noms ne diffèrent que par les caractères en majuscule ou en minuscule ..), essayez ceci pour une explication:

TheMerger OpenstepConfusion

Gregor
la source
4
J'aurais pu jurer qu'Apple l'avait licencié pour diverses raisons.
Fund Monica's Lawsuit
43

À partir des documents de développement d'Apple:

Note historique: Si vous vous demandez pourquoi tant de classes que vous rencontrez ont un préfixe NS, c'est à cause de l'histoire passée de Cocoa et Cocoa Touch. Cocoa a commencé sa vie comme les cadres collectés utilisés pour créer des applications pour le système d'exploitation NeXTStep. Lorsque Apple a acheté NeXT en 1996, une grande partie de NeXTStep a été intégrée à OS X, y compris les noms de classe existants. Cocoa Touch a été présenté comme l'équivalent iOS de Cocoa; certaines classes sont disponibles dans Cocoa et Cocoa Touch, bien qu'il existe également un grand nombre de classes uniques à chaque plate-forme. Les préfixes à deux lettres comme NS et UI (pour les éléments d'interface utilisateur sur iOS) sont réservés à Apple.

Source: Programmation avec Objective-C

Jonathan Lin
la source
23

De Cocoa_ (API) Wikipedia :

(pas d'italique dans l'original)

Les classes de cacao commencent par l'acronyme "NS" (représentant soit la création NeXT-Sun d'OpenStep , soit le terme propriétaire original pour le framework OpenStep, NeXTSTEP ): NSString, NSArray, etc.

Foundation Kit , ou plus communément simplement Foundation , est apparu pour la première fois dans OpenStep . Sur Mac OS X, il est basé sur Core Foundation. Foundation est une bibliothèque générique orientée objet fournissant des manipulations de chaînes et de valeurs, des conteneurs et des itérations, de l'informatique distribuée, des boucles d'exécution et d'autres fonctions qui ne sont pas directement liées à l'interface utilisateur graphique. Le préfixe « NS » , utilisé pour toutes les classes et constantes dans le cadre, vient du patrimoine OPENSTEP de cacao, qui a été développé conjointement par NeXT et dim. .

chown
la source
Wikipedia a tort ici. Foundation Kit est apparu pour la première fois dans Enterprise Objects Framework , qui est antérieur à OpenStep. Soit dit en passant, la version NeXT de Foundation était censée être basée sur une API C de type CoreFoundation, mais elle n'a pas été exposée en tant
@ user23743, je ne pense pas que vous ayez raison. EOF est antérieur au système d'exploitation OPENSTEP, mais pas à l'API OpenStep. La documentation EOF à laquelle vous avez lié directement (fait référence à OpenStep) [ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/… , et elles ont toutes deux été publiées en 1994.
AriX
12

Lorsque NeXT définissait l'API NextStep (par opposition au système d'exploitation NEXTSTEP), ils utilisaient le préfixe NX, comme dans NXConstantString. Quand ils écrivaient la spécification OpenStep avec Sun (à ne pas confondre avec le système d'exploitation OPENSTEP), ils utilisaient le préfixe NS, comme dans NSObject.


la source
10

Fondamentalement, NS provient de N ext S TEP, le système d'exploitation d'origine qui est devenu Mac OS X lorsque Apple a acquis Next.

Je veux expliquer autre chose et c'est pourquoi c'est exactement nécessaire.

En C ++, il y a des espaces de noms et presque tout se passe en std

C'est pourquoi vous avez std :: string.

Les espaces de noms sont utilisés, il est donc plus difficile pour vous de faire une erreur et vous pouvez écrire votre propre chaîne de classe sans entrer en conflit avec celle du système.

Objective-C est un surensemble de C, mais il n'inclut pas les espaces de noms et pour la même raison, toutes les classes système sont préfixées par NS ou un autre étrange préfixe.

Cette chose est la même de la façon dont toutes les classes DirectX sont préfixées avec D3D et comment toutes les classes OpenGL sont préfixées avec gl .

Cela signifie que vous ne devez pas utiliser NS pour nommer vos propres classes et lorsque vous voyez NS , CA dans Core Animation ou CG dans Core Graphics, vous comprenez qu'il s'agit d'un appel à une infrastructure système.

Swift modifie cette convention, car Swift prend en charge l'espace de noms et mappe ses types principaux comme String aux équivalents NS.

Daniel Georgiev
la source
6

Bill Bumgarner aka @bbum, qui devrait savoir , a posté sur la liste de diffusion de CocoaBuilder en 2005 :

Sun est entré dans l'image un peu après l'entrée en jeu du préfixe NS. Le préfixe NS est apparu dans les API publiques lors du passage de NeXTSTEP 3.0 à NeXTSTEP 4.0 (également appelé OpenStep). Avant la version 4.0, une poignée de symboles utilisaient le préfixe NX, mais la plupart des classes fournies par les bibliothèques système n'étaient pas du tout préfixées - List, Hashtable, View, etc ...

Il semble que tout le monde s'accorde à dire que le préfixe NX (pour NeXT) a été utilisé jusqu'en 1993/1994, et les documents d'Apple disent :

L'API OpenStep officielle, publiée en septembre 1994, a été la première à diviser l'API entre Foundation et Application Kit et la première à utiliser le préfixe «NS».

Simon Woodside
la source