O que significa o prefixo NS?

579

Muitas classes no Cocoa / Cocoa Touch têm o prefixo NS. O que isso significa?

Martin08
fonte

Respostas:

456

É da herança NeXTSTEP .

Olaf Kock
fonte
7
... ou talvez a herança NeXT / Sun (Sun foi um dos participantes no consórcio OpenStep)
Barry Wark
27
Sim, claro. Está tudo muito bem apresentado nas outras respostas, é por isso que não me importei em copiar essas informações nas minhas. Desculpe se isso ofende alguém - não me importo se a resposta aceita mudar para uma das outras (se isso for possível - nunca verifiquei isso).
Olaf Kock
2
Gostaria de ver mais informações, mas o link para NeXTSTEP
Bagrat Kirakosian, de 22/10
784

O código original para as estruturas Cocoa veio da NeXTSTEP library Foundation e do AppKit (esses nomes ainda são usados ​​pelas estruturas Cocoa da Apple), e os engenheiros da NextStep optaram por prefixar seus símbolos no NS.

Como o Objective-C é uma extensão de C e, portanto, não possui espaços para nome como no C ++, os símbolos devem ser prefixados com um prefixo exclusivo para que não colidam. Isso é particularmente importante para os símbolos definidos em uma estrutura.

Se você estiver escrevendo um aplicativo, de forma que seu código provavelmente use seus símbolos, não precisará se preocupar com isso. Mas se você estiver escrevendo uma estrutura ou biblioteca para uso de outras pessoas, também deverá prefixar seus símbolos com um prefixo exclusivo. O CocoaDev possui uma página na qual muitos desenvolvedores da comunidade Cocoa listaram seus prefixos "escolhidos". Você também pode achar útil essa discussão sobre SO .

Barry Wark
fonte
150

N eXT S TEP ou N eXTSTEP / S un, dependendo de quem você está perguntando.

A Sun teve um investimento bastante grande no OpenStep por um tempo. Antes de a Sun entrar em cena, a maioria das coisas na fundação, embora não fosse conhecida como fundação naquela época, era o prefixo NX , para N e X T, e algum tempo antes da Sun entrar em cena, tudo foi renomeado para NS . O S provavelmente não representam Sun, em seguida, mas depois de Sun entrou em cena o consenso geral era de que ele representa o Sun para honrar o seu envolvimento.

Na verdade, eu tinha uma referência para isso, mas não consigo encontrá-la agora. Atualizarei a postagem se / quando a encontrar novamente.

David Holm
fonte
4
Eu ouvi a mesma história de uma fonte muito confiável; Tenho certeza de que esta é a resposta mais precisa aqui.
Tyler
2
Eu encontrei uma referência: cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html
Simon Woodside
@SimonWoodside O link está morto.
Dinsdale 11/03
Arquivo de referência da Internet: web.archive.org/web/20151008121657/http://www.cocoabuilder.com/…
Simon Woodside
53

É a herança NextStep (= NS). A NeXT foi a empresa de computadores que Steve Jobs formou depois que ele saiu da Apple em 1985, e o NextStep era seu sistema operacional (baseado em UNIX) junto com a linguagem Obj-C e o tempo de execução. Juntamente com suas bibliotecas e ferramentas, o NextStep foi renomeado para OpenStep (que também era o nome de uma API que a NeXT desenvolveu junto com a Sun), que por sua vez se tornou Cocoa.

Esses nomes diferentes são realmente bastante confusos (especialmente porque alguns dos nomes diferem apenas nos caracteres em maiúsculas ou minúsculas ..), tente isso para obter uma explicação:

TheMerger OpenstepConfusion

Gregor
fonte
4
Eu poderia jurar que a Apple o demitiu por várias razões.
Fund Monica's Lawsuit
43

Dos documentos de desenvolvedor da Apple:

Nota histórica: Se você está se perguntando por que tantas das classes que você encontra tem um prefixo NS, é por causa do histórico do Cocoa e do Cocoa Touch. O cacau começou a vida como as estruturas coletadas usadas para criar aplicativos para o sistema operacional NeXTStep. Quando a Apple comprou o NeXT em 1996, grande parte do NeXTStep foi incorporada ao OS X, incluindo os nomes de classe existentes. O Cocoa Touch foi introduzido como o equivalente do iOS ao Cocoa; algumas aulas estão disponíveis no Cocoa e no Cocoa Touch, embora também haja um grande número de classes exclusivas para cada plataforma. Prefixos de duas letras como NS e UI (para elementos da interface do usuário no iOS) são reservados para uso pela Apple.

Fonte: Programação com Objective-C

Jonathan Lin
fonte
23

De Cocoa_ (API) Wikipedia :

(enfase adicionada)

As classes de cacau começam com o acrônimo "NS" (que significa a criação do OpenStep na NeXT-Sun ou o termo proprietário original da estrutura OpenStep, NeXTSTEP ): NSString, NSArray etc.

O Foundation Kit , ou mais comumente simplesmente o Foundation , apareceu pela primeira vez no OpenStep . No Mac OS X, é baseado no Core Foundation. O Foundation é uma biblioteca genérica orientada a objetos que fornece manipulação de string e valor, contêineres e iteração, computação distribuída, loops de execução e outras funções que não estão diretamente ligadas à interface gráfica do usuário. O prefixo "NS" , usado para todas as classes e constantes no quadro, vem da herança OPENSTEP de cacau, que foi desenvolvido em conjunto pela NeXT e Sun .

chown
fonte
A Wikipedia está errada aqui. O Foundation Kit apareceu pela primeira vez no Enterprise Objects Framework , anterior ao OpenStep. Aliás a próxima versão da Fundação foi supostamente baseado em uma CoreFoundation-like C API, mas que não foi exposta como interface pública até Mac OS X.
@ user23743, não acho que você esteja correto. O EOF é anterior ao sistema operacional OPENSTEP, mas não à API do OpenStep. A documentação EOF é ligada ao diretamente (referências OpenStep) [ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/... , e eles foram ambos lançados em 1994.
Arix
12

Quando a NeXT definia a API NextStep (em oposição ao sistema operacional NEXTSTEP), eles usavam o prefixo NX, como no NXConstantString. Quando eles estavam escrevendo a especificação OpenStep com a Sun (para não confundir com o sistema operacional OPENSTEP), eles usaram o prefixo NS, como no NSObject.


fonte
10

Basicamente, o NS vem do N ext S TEP, o sistema operacional original que se tornou o Mac OS X quando a Apple adquiriu o Next.

Quero explicar outra coisa e é por isso que exatamente é necessário.

Em C ++, existem namespaces e quase tudo ocorre em std

É por isso que você tem std :: string.

Os espaços para nome são usados, portanto é mais difícil cometer um erro e você pode escrever sua própria sequência de classes sem entrar em conflito com a do sistema.

Objective-C é um superconjunto de C, mas não inclui namespaces e, pelo mesmo motivo, acima de todas as classes de sistema são prefixadas com NS ou algum outro prefixo estranho.

É o mesmo de como todas as classes do DirectX são prefixadas com o D3D e como todas as classes do OpenGL são prefixadas com o gl .

Isso significa que você não deve usar o NS para nomear suas próprias classes e, quando vê NS , CA no Core Animation ou CG no Core Graphics, entende que essa é uma chamada para uma estrutura do sistema.

O Swift altera essa convenção, porque o Swift suporta espaçamento de nomes e mapeia seus tipos principais, como String, para os equivalentes do NS.

Daniel Georgiev
fonte
6

Bill Bumgarner aka @bbum, que deveria saber , postou na lista de discussão CocoaBuilder em 2005 :

A Sun entrou em cena um pouco depois que o prefixo NS entrou em cena. O prefixo NS surgiu nas APIs públicas durante a mudança do NeXTSTEP 3.0 para o NeXTSTEP 4.0 (também conhecido como OpenStep). Antes da versão 4.0, um punhado de símbolos usava o prefixo NX, mas a maioria das classes fornecidas pelas bibliotecas do sistema não eram prefixadas - List, Hashtable, View, etc ...

Parece que todos concordam que o prefixo NX (para o NeXT) foi usado até 1993/1994, e os documentos da Apple dizem :

A API oficial do OpenStep, publicada em setembro de 1994, foi a primeira a dividir a API entre o Foundation e o Application Kit e a primeira a usar o prefixo "NS".

Simon Woodside
fonte