¿Qué significa el prefijo NS?

Respuestas:

456

Es de la herencia NeXTSTEP .

Olaf Kock
fuente
77
... o tal vez la herencia NeXT / Sun (Sun participó en el consorcio OpenStep)
Barry Wark
27
Sí, por supuesto. Todo está muy bien presentado en las otras respuestas, por eso no me molesté en copiar esa información en la mía. Lo siento si eso ofende a alguien, no me importa si la respuesta aceptada cambia a una de las otras (si eso es posible, nunca lo verifiqué).
Olaf Kock
2
Me gustaría ver más, pero el enlace a NeXTSTEP
Bagrat Kirakosian
784

El código original para los frameworks Cocoa provino de las bibliotecas NeXTSTEP Foundation y AppKit (esos nombres todavía son utilizados por los frameworks Cocoa de Apple), y los ingenieros de NextStep decidieron prefijar sus símbolos con NS.

Como Objective-C es una extensión de C y, por lo tanto, no tiene espacios de nombres como en C ++, los símbolos deben tener como prefijo un prefijo único para que no choquen. Esto es particularmente importante para los símbolos definidos en un marco.

Si está escribiendo una aplicación, de modo que es probable que su código solo use sus símbolos, no tiene que preocuparse por esto. Pero si está escribiendo un marco o biblioteca para el uso de otros, también debe anteponer sus símbolos con un prefijo único. CocoaDev tiene una página donde muchos desarrolladores de la comunidad de Cocoa han enumerado sus prefijos "elegidos". También puede encontrar útil esta discusión SO .

Barry Wark
fuente
150

N eXT S TEP o N eXTSTEP / S un dependiendo de a quién le pregunte.

Sun tuvo una inversión bastante grande en OpenStep por un tiempo. Antes de que Sun ingresara a la imagen, la mayoría de las cosas en la base, aunque no se conocía como la base en ese entonces, tenía el prefijo NX , para N e X T, y en algún momento justo antes de que Sun ingresara a la imagen, todo cambió su nombre a NS . Lo más probable es que la S no representara a Sun en ese momento, pero después de que Sun intervino en el consenso general fue que representaba a Sun para honrar su participación.

De hecho, tenía una referencia para esto, pero no puedo encontrarla en este momento. Actualizaré la publicación si / cuando la encuentre de nuevo.

David Holm
fuente
44
He escuchado la misma historia de una fuente muy confiable; Estoy bastante seguro de que esta es la respuesta más precisa aquí.
Tyler
2
Encontré una referencia: cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html
Simon Woodside
@SimonWoodside Link está muerto.
Dinsdale
Archivo de referencia de Internet: web.archive.org/web/20151008121657/http://www.cocoabuilder.com/…
Simon Woodside
53

Es el patrimonio NextStep (= NS). NeXT fue la compañía de computadoras que Steve Jobs formó después de que dejó Apple en 1985, y NextStep fue su sistema operativo (basado en UNIX) junto con el lenguaje Obj-C y el tiempo de ejecución. Junto con sus bibliotecas y herramientas, NextStep pasó a llamarse OpenStep (que también era el nombre en una API que NeXT desarrolló junto con Sun), que a su vez más tarde se convirtió en Cocoa.

Estos diferentes nombres son bastante confusos (especialmente porque algunos de los nombres difieren solo en los caracteres en mayúscula o minúscula ...), intente esto para obtener una explicación:

TheMerger OpenstepConfusion

Gregor
fuente
44
Podría haber jurado que Apple lo despidió por varias razones.
Financia la demanda de Mónica el
43

De los documentos de desarrollador de Apple:

Nota histórica: si se pregunta por qué tantas de las clases que encuentra tienen un prefijo NS, es por la historia pasada de Cocoa y Cocoa Touch. Cocoa comenzó su vida como los marcos recopilados utilizados para crear aplicaciones para el sistema operativo NeXTStep. Cuando Apple compró NeXT en 1996, gran parte de NeXTStep se incorporó a OS X, incluidos los nombres de clase existentes. Cocoa Touch se introdujo como el equivalente de iOS de Cocoa; Algunas clases están disponibles en Cocoa y Cocoa Touch, aunque también hay una gran cantidad de clases exclusivas para cada plataforma. Los prefijos de dos letras como NS y UI (para elementos de la interfaz de usuario en iOS) están reservados para su uso por parte de Apple.

Fuente: Programación con Objective-C

Jonathan Lin
fuente
23

De Cocoa_ (API) Wikipedia :

(énfasis añadido)

Las clases de cacao comienzan con el acrónimo "NS" (que representa la creación NeXT-Sun de OpenStep o el término propietario original para el marco OpenStep, NeXTSTEP ): NSString, NSArray, etc.

Foundation Kit , o más comúnmente simplemente Foundation , apareció por primera vez en OpenStep . En Mac OS X, se basa en Core Foundation. Foundation es una biblioteca genérica orientada a objetos que proporciona manipulación de cadenas y valores, contenedores e iteraciones, computación distribuida, ciclos de ejecución y otras funciones que no están directamente vinculadas a la interfaz gráfica de usuario. El prefijo "NS" , que se utiliza para todas las clases y constantes en el marco, proviene de la herencia OPENSTEP de cacao, que fue desarrollado conjuntamente por NeXT y Sun .

chown
fuente
Wikipedia está mal aquí. Foundation Kit apareció por primera vez en Enterprise Objects Framework , que es anterior a OpenStep. Por cierto, la versión NeXT de Foundation supuestamente se basó en una API C de CoreFoundation, pero eso no se expuso como interfaz pública hasta Mac OS X.
@ user23743, no creo que estés en lo correcto. EOF es anterior al sistema operativo OPENSTEP, pero no a la API OpenStep. La documentación de EOF a la que se vinculó directamente (hace referencia a OpenStep) [ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/… , y ambos se lanzaron en 1994.
AriX
12

Cuando NeXT definía la API NextStep (a diferencia del sistema operativo NEXTSTEP), usaban el prefijo NX, como en NXConstantString. Cuando estaban escribiendo la especificación OpenStep con Sun (que no debe confundirse con el sistema operativo OPENSTEP) usaron el prefijo NS, como en NSObject.


fuente
10

Básicamente, NS proviene de N ext S TEP, el sistema operativo original que se convirtió en Mac OS X cuando Apple adquirió Next.

Quiero explicar algo más y es por eso que se necesita exactamente.

En C ++ hay espacios de nombres y casi todo va en estándar

Por eso tienes std :: string.

Los espacios de nombres se utilizan, por lo que es más difícil cometer un error y puede escribir su propia cadena de clase sin entrar en conflicto con la del sistema.

Objective-C es un superconjunto de C, pero no incluye espacios de nombres y, por la misma razón, sobre todas las clases del sistema tienen el prefijo NS o algún otro prefijo extraño.

Esto es lo mismo de cómo todas las clases de DirectX tienen el prefijo D3D y cómo todas las clases de OpenGL tienen el prefijo gl .

Esto significa que no debe usar NS para nombrar sus propias clases y cuando ve NS , CA en Core Animation o CG en Core Graphics, comprende que esta es una llamada a un marco de sistema.

Swift cambia esta convención, porque Swift admite espacios de nombres y asigna sus tipos principales como String a los equivalentes NS.

Daniel Georgiev
fuente
6

Bill Bumgarner, alias @bbum, que debería saber , publicó en la lista de correo de CocoaBuilder en 2005 :

Sun entró en escena un poco después de que el prefijo NS entrara en juego. El prefijo NS surgió en las API públicas durante el cambio de NeXTSTEP 3.0 a NeXTSTEP 4.0 (también conocido como OpenStep). Antes de 4.0, un puñado de símbolos usaba el prefijo NX, pero la mayoría de las clases proporcionadas por las bibliotecas del sistema no tenían prefijo en absoluto: Lista, Hashtable, Vista, etc.

Parece que todos están de acuerdo en que el prefijo NX (para NeXT) se usó hasta 1993/1994, y los documentos de Apple dicen :

La API oficial de OpenStep, publicada en septiembre de 1994, fue la primera en dividir la API entre Foundation y Application Kit y la primera en usar el prefijo "NS".

Simon Woodside
fuente