Co oznacza przedrostek NS?

Odpowiedzi:

456

Pochodzi z dziedzictwa NeXTSTEP .

Olaf Kock
źródło
7
... a może dziedzictwo NeXT / Sun (Sun był uczestnikiem konsorcjum OpenStep)
Barry Wark
27
Tak oczywiście. Wszystko zostało pięknie ułożone w innych odpowiedziach, dlatego nie zawracałem sobie głowy kopiowaniem tych informacji do moich. Przepraszam, jeśli to kogoś obraża - nie mam nic przeciwko, jeśli zaakceptowana odpowiedź zmieni się na jedną z pozostałych (jeśli to możliwe - nigdy tego nie sprawdziłem).
Olaf Kock
2
Chciałbym zobaczyć więcej, ale link do NeXTSTEP
Bagrat Kirakosian
784

Oryginalny kod frameworka Cocoa pochodzi z Fundacji bibliotek NeXTSTEP i AppKit (te nazwy są nadal używane przez frameworki Cocoa firmy Apple), a inżynierowie NextStep postanowili poprzedzić swoje symbole NS.

Ponieważ Objective-C jest rozszerzeniem C i dlatego nie ma przestrzeni nazw jak w C ++, symbole muszą być poprzedzone unikalnym prefiksem, aby się nie kolidowały. Jest to szczególnie ważne w przypadku symboli zdefiniowanych w ramach.

Jeśli piszesz aplikację w taki sposób, że Twój kod prawdopodobnie używa tylko twoich symboli, nie musisz się tym martwić. Ale jeśli piszesz strukturę lub bibliotekę do użytku innych, powinieneś również poprzedzić swoje symbole unikalnym przedrostkiem. CocoaDev ma stronę, na której wielu programistów ze społeczności Cocoa wymieniło swoje „wybrane” prefiksy. Ta dyskusja SO może być również pomocna.

Barry Wark
źródło
150

N eXT S TEP lub N eXTSTEP / S zależnie od tego, kogo pytasz.

Przez jakiś czas firma Sun miała dość dużą inwestycję w OpenStep. Zanim Sun pojawił się na zdjęciu, większość rzeczy w fundamencie, mimo że nie była wtedy znana jako fundacja, była poprzedzona NX , dla N e X T, a jakiś czas tuż przed pojawieniem się Sun na zdjęciu wszystko zostało przemianowane na NS . S najprawdopodobniej nie stać na słońcu następnie ale po Sun wszedł w ogólnym konsensusu było to, że stał na słońcu, aby uczcić ich zaangażowanie.

Właściwie miałem do tego odniesienie, ale nie mogę go teraz znaleźć. Zaktualizuję post, jeśli / kiedy go znajdę ponownie.

David Holm
źródło
4
Słyszałem tę samą historię z bardzo wiarygodnego źródła; Jestem prawie pewien, że jest to najdokładniejsza odpowiedź tutaj.
Tyler
2
Znalazłem referencję: cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html
Simon Woodside,
@SimonWoodside Link nie żyje.
Dinsdale
Internetowe archiwum referencyjne: web.archive.org/web/20151008121657/http://www.cocoabuilder.com/…
Simon Woodside
53

Jest to dziedzictwo NextStep (= NS). NeXT to firma komputerowa, którą Steve Jobs założył po odejściu z Apple w 1985 roku, a NextStep to system operacyjny (oparty na UNIX) wraz z językiem Obj-C i środowiskiem uruchomieniowym. Wraz z bibliotekami i narzędziami NextStep został później przemianowany na OpenStep (który był również nazwą interfejsu API opracowanego przez NeXT wraz z Sun), który z kolei później stał się Cocoa.

Te różne nazwy są w rzeczywistości dość mylące (zwłaszcza, że ​​niektóre z nich różnią się tylko tym, że znaki są pisane wielkimi lub małymi literami ...), spróbuj tego w celu wyjaśnienia:

Połączenie OpenstepConfusion

Gregor
źródło
4
Mógłbym przysiąc, że Apple go zwolnił z różnych powodów.
Pozew Fund Moniki w dniu
43

Z dokumentacji programistów Apple:

Uwaga historyczna: Jeśli zastanawiasz się, dlaczego tak wiele klas, które napotykasz, ma prefiks NS, dzieje się tak z powodu przeszłości Cocoa i Cocoa Touch. Cocoa zaczęło życie jako zebrane frameworki używane do tworzenia aplikacji dla systemu operacyjnego NeXTStep. Kiedy Apple kupił NeXT w 1996 roku, większość NeXTStep zostało włączone do OS X, w tym istniejące nazwy klas. Cocoa Touch został wprowadzony jako odpowiednik Cocoa dla iOS; niektóre klasy są dostępne zarówno w Cocoa, jak i Cocoa Touch, chociaż istnieje również duża liczba klas unikalnych dla każdej platformy. Dwuliterowe prefiksy, takie jak NS i interfejs użytkownika (dla elementów interfejsu użytkownika w systemie iOS) są zastrzeżone do użytku przez Apple.

Źródło: Programowanie w Objective-C

Jonathan Lin
źródło
23

Z Cocoa_ (API) Wikipedia :

(podkreślenie dodane)

Klasy kakao zaczynają się od akronimu „NS” (oznaczającego albo tworzenie OpenStep przez NeXT-Sun , albo oryginalny termin będący własnością frameworku OpenStep, NeXTSTEP ): NSString, NSArray itp.

Zestaw podstawowy , lub częściej po prostu Foundation , pojawił się po raz pierwszy w OpenStep . W systemie Mac OS X jest oparty na Core Foundation. Podstawa to ogólna, obiektowa biblioteka zapewniająca manipulację ciągami i wartościami, kontenery i iteracje, przetwarzanie rozproszone, pętle uruchomieniowe i inne funkcje, które nie są bezpośrednio powiązane z graficznym interfejsem użytkownika. W „NS” prefiks , stosowany do wszystkich klas i stałych w ramach pochodzi z Cocoa OPENSTEP dziedzictwa, który został opracowany wspólnie przez NeXT i Słońca .

chown
źródło
Wikipedia się myli. Zestaw podstawowy pojawił się po raz pierwszy w Enterprise Objects Framework , który poprzedza OpenStep. Nawiasem mówiąc, wersja Fundacji NeXT była podobno oparta na C API podobnym do
@ user23743, nie sądzę, że masz rację. EOF poprzedza system operacyjny OPENSTEP, ale nie API OpenStep. Dokumentacja EOF, do której bezpośrednio podłączyłeś (odwołuje się do OpenStep) [ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/... , i obie zostały wydane w 1994 r.
AriX
12

Kiedy NeXT definiowało API NextStep (w przeciwieństwie do systemu operacyjnego NEXTSTEP), używali przedrostka NX, jak w NXConstantString. Kiedy pisali specyfikację OpenStep z Sun (nie mylić z systemem operacyjnym OPENSTEP), używali przedrostka NS, jak w NSObject.


źródło
10

Zasadniczo NS pochodzi z N ext S TEP, oryginalnego systemu operacyjnego, który stał się Mac OS X, kiedy Apple nabył Next.

Chcę wyjaśnić coś jeszcze i właśnie dlatego jest to potrzebne.

W C ++ istnieją przestrzenie nazw i prawie wszystko idzie w std

Właśnie dlatego masz std :: string.

Przestrzenie nazw są używane, więc trudniej jest popełnić błąd i możesz napisać własny ciąg klasy bez konfliktu z systemem.

Cel C jest nadzbiorem C, ale nie obejmuje przestrzeni nazw iz tego samego powodu powyżej wszystkie klasy systemowe mają przedrostek NS lub jakiś inny dziwny przedrostek.

To samo dotyczy tego, jak wszystkie klasy DirectX są poprzedzone D3D i jak wszystkie klasy OpenGL są poprzedzone gl .

Oznacza to, że nie powinieneś używać NS do nazywania własnych klas, a kiedy widzisz NS , CA w Core Animation lub CG w Core Graphics, rozumiesz, że jest to wywołanie frameworka systemowego.

Swift zmienia tę konwencję, ponieważ Swift obsługuje przestrzeń nazw i mapuje swoje podstawowe typy, takie jak String, na odpowiedniki NS.

Daniel Georgiev
źródło
6

Bill Bumgarner aka @bbum, który powinien wiedzieć , opublikował na liście mailingowej CocoaBuilder w 2005 roku :

Sun wszedł na zdjęcie nieco po wejściu w grę prefiksu NS. Prefiks NS pojawił się w publicznych interfejsach API podczas przejścia z NeXTSTEP 3.0 do NeXTSTEP 4.0 (znany również jako OpenStep). W wersjach wcześniejszych niż 4.0 garść symboli używała prefiksu NX, ale większość klas dostarczanych przez biblioteki systemowe wcale nie była prefiksowana - Lista, Hashtable, Widok itp.

Wydaje się, że wszyscy zgadzają się, że przedrostek NX (dla NeXT) był używany do 1993/1994, a dokumenty Apple'a mówią :

Oficjalny interfejs API OpenStep, opublikowany we wrześniu 1994 r., Był pierwszym, który podzielił interfejs API między Foundation i Application Kit, a jako pierwszy użył prefiksu „NS”.

Simon Woodside
źródło