Mange klasser i Cocoa / Cocoa Touch har NS prefiks. Hva betyr det?
Hva gjør NS prefikset mener?
Den opprinnelige koden for Cocoa rammeverk kom fra Nextstep biblioteker Foundation og AppKit (disse navnene er fortsatt i bruk av Apples Cocoa rammer), og Nextstep ingeniører valgte å prefiks deres symboler med NS.
Fordi Objective-C er en utvidelse av C, og dermed har ikke navnerom som i C ++, må symboler ha prefikset med et unikt prefiks, slik at de ikke kolliderer. Dette er spesielt viktig for symboler som er definert i et rammeverk.
Hvis du skriver et program, slik at koden er bare noen gang kommer til å bruke symboler, trenger du ikke å bekymre deg for dette. Men hvis du skriver et rammeverk eller biblioteket for andres bruk, bør du også prefiks dine symboler med et unikt prefiks. CocoaDev har en side der mange utviklere i Cocoa samfunnet har oppført sine "utvalgte" prefikser. Du kan også finne dette slik diskusjon nyttig.
Det er fra Nextstep arv.
N ext S TEP eller N eXTSTEP / S un avhengig av hvem du spør.
Sun hadde en ganske stor investering i Openstep for en stund. Før Sun kom inn i bildet de fleste ting i grunnlaget, selv om det ikke var kjent som grunnlaget tilbake da, var prefiks NX , for N e X T, og en gang like før solen kom inn i bildet alt ble omdøpt til NS . Den S mest sannsynlig ikke stå for Sun da, men etter Sun steppet inn den generelle konsensus var at det sto for Sun å hedre deres engasjement.
Jeg hadde faktisk en referanse for dette, men jeg kan ikke finne det akkurat nå. Jeg vil oppdatere innlegget hvis / når jeg finner den igjen.
Det er den Nextstep (= NS) arv. Neste var datafirma som Steve Jobs dannet etter at han sluttet Apple i 1985, og Nextstep var det operativsystem (UNIX basert) sammen med Obj-C-språk og runtime. Sammen med det er biblioteker og verktøy, ble Nextstep senere omdøpt Openstep (som også var navnet på en API som NeXT utviklet sammen med Sun), som i sin tur senere ble Cocoa.
Disse ulike navnene er faktisk ganske forvirrende (spesielt siden noen av navnene skiller bare der karakterene er store eller små bokstaver ..), prøv dette for en forklaring:
Fra Apples utviklerdokumentene:
Historisk Merk: Hvis du lurer på hvorfor så mange av de klassene du møter har en NS prefiks, er det på grunn av tidligere historie med Kakao og Cocoa Touch. Cocoa begynte livet som de innsamlede rammer brukes til å bygge apps for Nextstep operativsystemet. Når Apple kjøpte NeXT tilbake i 1996, mye av Nextstep ble innlemmet i OS X, inkludert de eksisterende klasse navn. Cocoa Touch ble innført som iOS tilsvarende kakao; noen klasser er tilgjengelige i både Kakao og Cocoa Touch, men det finnes også et stort antall klasser som er unike for hver plattform. To-brev prefikser som NS og UI (for brukergrensesnitt elementer på iOS) er reservert for bruk av Apple.
Fra Cocoa_ (API) Wikipedia :
(Vekt tilsatt)
Kakao klasser begynne med forkortelsen "NS" (stående enten for NeXT-søn etablering av Openstep , eller for den opprinnelige proprietære betegnelse for Openstep rammeverk, Nextstep ): NSString, NSArray, etc.
Foundation Kit , eller mer vanlig bare Foundation , dukket først opp i Openstep . På Mac OS X, er det basert på Core-stiftelsen. Foundation er en generisk objektorientert bibliotek som gir strengen og verdi manipulasjon, beholdere og iterasjon, distribuert databehandling, kjøre løkker, og andre funksjoner som ikke er direkte knyttet til det grafiske brukergrensesnittet. Den "NS" prefiks , brukes for alle klasser og konstanter i rammen, kommer fra Cocoa er OPENSTEP arv, som ble utviklet i fellesskap av NeXT og Sun .
Når neste ble definerer Nextstep API (i motsetning til den Nextstep operativsystem), anvendes de prefikset NX, som i NXConstantString. Da de ble skriver Openstep spesifikasjonen med Sun (må ikke forveksles med OPENSTEP operativsystemet) de brukte NS prefiks, som i NSObject.
I utgangspunktet NS kommer fra N ext S TEP, det opprinnelige operativsystemet som ble Mac OS X når Apple ervervet Neste.
Jeg ønsker å forklare noe annet, og dette er grunnen til at akkurat det er nødvendig.
I C ++ er det navnerom og nesten alt går i std
Dette er grunnen til at du har std :: string.
Navnerom brukes slik at det er vanskeligere for deg å gjøre en feil, og du kan skrive din egen klasse strengen uten å komme i konflikt med systemet en.
Objective-C er overordnet sett C, men det inkluderer ikke navnerom og av samme grunn ovenfor alle systemklasse er preffixed med NS eller annen merkelig preffix.
Denne saken er det samme hvor alle DirectX klassene preffixed med D3D og hvordan alle OpenGL klassene preffixed med gl .
Det betyr at du ikke bør bruke NS å navngi dine egne klasser og når du ser NS , CA i Core Animation eller CG i Core-Graphics du forstår at dette er en oppfordring til et system rammeverk.
Raske endringer denne konvensjonen, fordi Swift støtter navneområder og det kartkjerne typer som String til NS-ekvivalenter.
Bill Bumgarner aka @bbum, som burde vite , lagt ut på CocoaBuilder adresseliste i 2005 :
Sun kom inn i bildet litt etter NS prefikset hadde kommet inn i bildet. NS prefiks kom i offentlige APIer under flyttingen fra Nextstep 3,0 til Nextstep 4.0 (også kjent som Openstep). Før 4.0, en håndfull av symboler som brukes NX prefiks, men de fleste klasser tilbys av system bibliotekene ble ikke prefikset i det hele tatt - List, hashtabellen, Utsikt, osv ...
Det virker som alle er enig i at prefikset NX (for NeXT) ble brukt til 1993/1994, og Apples docs si :
Den offisielle Openstep API, publisert i september 1994, var den første til å dele API mellom stiftelsen og Application Kit og den første til å bruke “NS” prefiks.
Det er fra Nextstep arv
Neste steg. Det er en hold fra når objektiv-c er laget av ved siden av skrive Nextstep (senere os x) og alle tilknyttede applikasjoner, etc. De representerer elementer som ikke er del av den opprinnelige C understøttelsen, for eksempel, er det ingen 'streng' element i C, så i Objective-C, er det et ytterligere fundamentelement 'NSString'.













