Odpowiedzi:
Pochodzi z dziedzictwa NeXTSTEP .
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.
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.
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:
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
(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 .
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.
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.
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”.