2009-01-23 26 views

risposta

377

È dal patrimonio NeXTSTEP.

+7

... o forse il patrimonio NeXT/Sun (Sun era un partecipante al consorzio OpenStep) –

+24

Sì, certo. È tutto ben disposto nelle altre risposte, ecco perché non mi sono preoccupato di copiare quelle informazioni nelle mie. Scusate se questo offende qualcuno - non mi importa se la risposta accettata cambia a una delle altre (se possibile, non l'ho mai verificata). –

+1

Vorrei vedere di più ma il collegamento a NeXTSTEP –

726

Il codice originale per i framework Cocoa proviene dalle librerie NeXTSTEP Foundation e AppKit (questi nomi sono ancora utilizzati dai framework Cocoa di Apple) e gli ingegneri di NextStep hanno scelto di precedere i loro simboli con NS.

Poiché Objective-C è un'estensione di C e quindi non ha spazi dei nomi come in C++, i simboli devono essere preceduti da un prefisso univoco in modo che non entrino in collisione. Questo è particolarmente importante per i simboli definiti in un framework.

Se stai scrivendo un'applicazione, in modo tale che il tuo codice è probabile che utilizzi solo i tuoi simboli, non devi preoccuparti di questo. Ma se stai scrivendo un framework o una libreria per l'uso altrui, dovresti anche prefissare i simboli con un prefisso univoco. CocoaDev has a page dove molti sviluppatori nella comunità di Cocoa hanno elencato i loro prefissi "scelti". Potresti anche trovare utile this SO discussion.

+5

Il collegamento CocoaDev non funziona più –

48

È l'eredità NextStep (= NS). NeXT era la società informatica creata da Steve Jobs dopo aver lasciato Apple nel 1985 e NextStep era il suo sistema operativo (basato su UNIX) insieme al linguaggio Obj-C e al runtime. Insieme alle sue librerie e strumenti, NextStep è stato successivamente rinominato OpenStep (che era anche il nome su un'API sviluppata da NeXT insieme a Sun), che a sua volta divenne Cocoa.

Questi diversi nomi sono in realtà piuttosto confusa (tanto più che alcuni dei nomi differisce solo in cui i caratteri sono maiuscole o minuscole ..), provate questo per una spiegazione:

TheMerger OpenstepConfusion

+0

Potrei giurare che Apple lo abbia licenziato per vari motivi. –

139

N eXT S TEP o N eXTSTEP/S un a seconda di chi si sta chiedendo.

Sun ha avuto un investimento abbastanza grande in OpenStep per un po '. Prima che Sun entrasse nell'immagine la maggior parte delle cose nella fondazione, anche se non era nota come fondazione allora, era prefissata NX, per N e X T, e qualche volta poco prima che Sun entrasse nell'immagine tutto era rinominato NS. Il S molto probabilmente non rappresentava Sun, ma dopo che Sun fece un passo nel generale consenso fu che spicca che Sun onorasse il loro coinvolgimento.

In realtà avevo un riferimento per questo, ma non riesco a trovarlo in questo momento. Aggiornerò il post se/quando lo troverò di nuovo.

+4

Ho sentito la stessa storia da una fonte molto affidabile; Sono abbastanza sicuro che questa sia la risposta più accurata qui. – Tyler

+2

Ho trovato un riferimento: http://www.cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html –

9

Quando NeXT stava definendo l'API NextStep (in contrasto con il sistema operativo NEXTSTEP), utilizzava il prefisso NX, come in NXConstantString. Quando scrivevano le specifiche di OpenStep con Sun (da non confondere con il sistema operativo OPENSTEP) utilizzavano il prefisso NS, come in NSObject.

20

Da Cocoa_(API) Wikipedia:

(enfasi aggiunta)

classi Cocoa iniziano con l'acronimo "NS" (in piedi sia per la creazione NeXT-Sole di OpenStep, o per il termine proprietario originale per il framework OpenStep, NeXTSTEP): NSString, NSArray, ecc.

Foundation Kit, o più comunemente semplicemente Fondazione, prima apparizione in OpenStep. Su Mac OS X, è basato su Core Foundation. Foundation è una libreria orientata agli oggetti generica che fornisce manipolazione, contenitori e iterazione di stringhe e valori , calcolo distribuito, esecuzione di loop e altre funzioni che non sono direttamente collegate all'interfaccia utente grafica . Il prefisso "NS", utilizzato per tutte le classi e le costanti nel quadro, viene da patrimonio OPENSTEP di cacao, che è stato congiuntamente sviluppata da NeXT e Sun.

+0

Wikipedia è sbagliato qui. Foundation Kit [apparso per la prima volta in Enterprise Objects Framework] (http://www.cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/HybridWorld.htmld/index.html), che precede OpenStep. Per inciso, la versione NeXT di Foundation era basata su un'API C simile a CoreFoundation, ma non era esposta come interfaccia pubblica fino a Mac OS X. –

+6

Ah WTH Ho appena modificato anche wikipedia :-). –

+0

@ user23743, non penso che tu abbia ragione.EOF precede il sistema operativo OPENSTEP, ma non l'API OpenStep. La documentazione EOF che hai collegato direttamente (riferimenti OpenStep) [http://www.cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/IntroFoundation.htmld/], ed entrambi sono stati rilasciati nel 1994. – AriX

37

Dalla documentazione per sviluppatori di Apple:

Nota storica: Se vi state chiedendo il motivo per cui molte delle classi che si incontrano hanno un prefisso NS, è a causa della storia passata di Cocoa e Cocoa Touch. Cocoa ha iniziato la sua vita come framework usati per creare app per il sistema operativo NeXTStep. Quando Apple ha acquistato NeXT nel 1996, gran parte di NeXTStep è stata incorporata in OS X, inclusi i nomi delle classi esistenti. Cocoa Touch è stato introdotto come equivalente iOS di Cocoa; alcune classi sono disponibili sia in Cocoa che in Cocoa Touch, anche se ci sono anche un gran numero di classi uniche per ogni piattaforma. I prefissi a due lettere come NS e UI (per gli elementi dell'interfaccia utente su iOS) sono riservati per l'utilizzo da parte di Apple.

Fonte: Programming with Objective-C

5

Bill Bumgarner aka @bbum, who should know, pubblicato sul CocoaBuilder mailing list in 2005:

Sun è entrato in scena un po 'dopo il prefisso NS era venuto in gioco. Il prefisso NS era disponibile nelle API pubbliche durante il passaggio da NeXTSTEP 3.0 a NeXTSTEP 4.0 (noto anche come OpenStep). Prima di 4,0, un manciata di simboli utilizzato il prefisso NX, ma maggior parte delle classi fornite dal le librerie di sistema non sono stati preceduti a tutti - List, Hashtable, vista, ecc ...

Sembra che tutti sono d'accordo che il NX prefisso (per NeXT) è stato utilizzato fino 1993/1994, e Apple's docs say:

L'OpenStep API ufficiali, pubblicato nel settembre del 1994, fu il primo a dividere l'API tra la Fondazione e l'Application Kit e il primo ad usare il prefisso "NS".

4

Fondamentalmente NS viene da N ext S TEP, il sistema operativo originale che è diventato Mac OS X quando Apple ha acquisito Avanti.

Voglio spiegare qualcos'altro ed è per questo che è esattamente necessario.

In C++ ci sono gli spazi dei nomi e quasi tutto va in std

Questo è il motivo per cui si è std :: string.

Gli spazi dei nomi sono utilizzati, quindi è più difficile per te commettere un errore e puoi scrivere la tua stringa di classe senza entrare in conflitto con quella del sistema.

Objective-C è il superset di C, ma non include gli spazi dei nomi e per lo stesso motivo, soprattutto le classi di sistema sono prefissate con NS o qualche altro strano prefisso.

Questa cosa è lo stesso di come tutte le classi DirectX sono preffixed con D3D e come tutte le classi di OpenGL sono preffixed con gl.

Questo significa che non si dovrebbe usare NS di nominare le proprie classi e quando si vede NS, CA in Core Animation o CG nel core grafico si capisce che si tratta di una chiamata a un sistema struttura.

Swift modifica questa convenzione, poiché Swift supporta lo spazio dei nomi e mappa i suoi tipi principali come String agli equivalenti NS.

0

NextStep. È un residuo da quando l'obiettivo-c è stato creato da NeXT a scrivi nextstep (più tardi x) e tutte le app associate, ecc. Essi rappresentano elementi che non fanno parte della base C originale, per esempio, non c'è elemento 'stringa' in C, quindi in obiettivo-c, è un elemento di base aggiuntivo 'NSString'.