Risposte:
Viene dall'eredità di NeXTSTEP .
Il codice originale per i framework Cocoa proveniva dalle librerie NeXTSTEP Foundation e AppKit (quei nomi sono ancora usati dai framework Cocoa di Apple) e gli ingegneri NextStep hanno scelto di aggiungere il prefisso ai 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 si scontrino. Ciò è particolarmente importante per i simboli definiti in un framework.
Se stai scrivendo un'applicazione, in modo tale che il tuo codice sia probabilmente solo in grado di utilizzare i tuoi simboli, non devi preoccuparti di questo. Ma se stai scrivendo un framework o una libreria per l'uso da parte di altri, dovresti anche aggiungere il prefisso ai tuoi simboli con un prefisso univoco. CocoaDev ha una pagina in cui molti sviluppatori della comunità Cocoa hanno elencato i prefissi "scelti". Puoi anche trovare utile questa discussione SO .
N eXT S TEP o N eXTSTEP / S a seconda di chi si sta chiedendo.
Sun ha avuto un investimento abbastanza grande in OpenStep per un po '. Prima che Sun entrasse nella foto, la maggior parte delle cose nella fondazione, anche se allora non era conosciuta come la fondazione, aveva il prefisso NX , per N e X T, e poco prima che Sun entrasse nella foto tutto veniva ribattezzato NS . La S molto probabilmente non rappresentava il Sole allora, ma dopo che il Sole entrò nel consenso generale fu che stava per il Sole onorare il loro coinvolgimento.
In realtà ho avuto un riferimento per questo, ma non riesco a trovarlo in questo momento. Aggiornerò il post se / quando lo trovo di nuovo.
È l'eredità di NextStep (= NS). NeXT era la società di computer che Steve Jobs formò 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 ribattezzato OpenStep (che era anche il nome di un'API che NeXT ha sviluppato insieme a Sun), che a sua volta è diventato Cocoa.
Questi nomi diversi sono in realtà piuttosto confusi (soprattutto perché alcuni dei nomi differiscono solo per i caratteri in maiuscolo o minuscolo ..), prova questo per una spiegazione:
Dai documenti per gli sviluppatori di Apple:
Nota storica: se ti stai chiedendo perché così tante classi che incontri hanno un prefisso NS, è a causa della storia passata di Cocoa e Cocoa Touch. Cocoa ha iniziato la sua vita come i framework raccolti utilizzati per creare app per il sistema operativo NeXTStep. Quando Apple acquistò NeXT nel 1996, gran parte di NeXTStep fu incorporata in OS X, inclusi i nomi di classe esistenti. Cocoa Touch è stato introdotto come equivalente iOS di Cocoa; alcune classi sono disponibili sia in Cocoa che in Cocoa Touch, sebbene ci siano anche un gran numero di classi uniche per ciascuna piattaforma. I prefissi di due lettere come NS e UI (per gli elementi dell'interfaccia utente su iOS) sono riservati all'uso di Apple.
(enfasi aggiunta)
Le lezioni di cacao iniziano con l'acronimo "NS" (che sta per la creazione NeXT-Sun di OpenStep o per il termine originale proprietario per il framework OpenStep, NeXTSTEP ): NSString, NSArray, ecc.
Foundation Kit , o più comunemente semplicemente Foundation , è apparso per la prima volta in OpenStep . Su Mac OS X, si basa su Core Foundation. Foundation è una libreria generica orientata agli oggetti che fornisce manipolazione di stringhe e valori, contenitori e iterazioni, elaborazione distribuita, cicli di esecuzione e altre funzioni che non sono direttamente collegate all'interfaccia grafica utente. Il prefisso "NS" , utilizzato per tutte le classi e le costanti del quadro, viene dal patrimonio OPENSTEP di cacao, che è stato sviluppato congiuntamente da NeXT e Sun .
Quando NeXT stava definendo l'API NextStep (al contrario del sistema operativo NEXTSTEP), usavano il prefisso NX, come in NXConstantString. Quando scrivevano le specifiche OpenStep con Sun (da non confondere con il sistema operativo OPENSTEP) usavano il prefisso NS, come in NSObject.
Fondamentalmente NS proviene da N ext S TEP, il sistema operativo originale che divenne Mac OS X quando Apple acquistò Next.
Voglio spiegare qualcos'altro ed è per questo che è esattamente necessario.
In C ++ ci sono spazi dei nomi e quasi tutto va in std
Questo è il motivo per cui hai std :: string.
Gli spazi dei nomi vengono utilizzati, quindi è più difficile commettere un errore e puoi scrivere la tua stringa di classe senza essere in conflitto con quella di sistema.
Objective-C è il superset di C, ma non include gli spazi dei nomi e per lo stesso motivo sopra tutte le classi di sistema sono preceduti da NS o da qualche altro strano prefisso.
Questa cosa è la stessa di come tutte le classi DirectX hanno il prefisso D3D e come tutte le classi OpenGL hanno il prefisso gl .
Ciò significa che non dovresti usare NS per nominare le tue classi e quando vedi NS , CA in Core Animation o CG in Core Graphics capisci che si tratta di una chiamata a un framework di sistema.
Swift modifica questa convenzione, poiché Swift supporta lo spazio dei nomi e mappa i suoi tipi principali come String agli equivalenti NS.
Bill Bumgarner aka @bbum, che dovrebbe sapere , pubblicato sulla mailing list di CocoaBuilder nel 2005 :
Sun entrò in scena un po 'dopo che il prefisso NS era entrato in gioco. Il prefisso NS è nato nelle API pubbliche durante il passaggio da NeXTSTEP 3.0 a NeXTSTEP 4.0 (noto anche come OpenStep). Prima della 4.0, una manciata di simboli utilizzava il prefisso NX, ma la maggior parte delle classi fornite dalle librerie di sistema non erano affatto prefissate - Elenco, Hashtable, Visualizza, ecc ...
Sembra che tutti siano d'accordo sul fatto che il prefisso NX (per NeXT) sia stato utilizzato fino al 1993/1994, e i documenti di Apple dicono :
L'API OpenStep ufficiale, pubblicata nel settembre del 1994, è stata la prima a dividere l'API tra Foundation e Application Kit e la prima a utilizzare il prefisso "NS".