Что означает префикс NS?

Ответы:

456

Это из наследия NeXTSTEP .

Олаф Кок
источник
7
... или, возможно, наследие NeXT / Sun (Sun была участником консорциума OpenStep)
Барри Уарк,
27
Ну конечно; естественно. Все это прекрасно изложено в других ответах, поэтому я не стал копировать эту информацию в свою. Извините, если это кого-то обидит - я не против, если принятый ответ изменится на один из других (если это возможно - никогда не проверял).
Олаф Кок
2
Я хотел бы видеть больше, но ссылку на NeXTSTEP
Баграт Киракосян
784

Оригинальный код для фреймворков Cocoa был взят из библиотек NeXTSTEP Foundation и AppKit (эти имена до сих пор используются фреймворками Apple Cocoa), и инженеры NextStep предпочли префикс своих символов перед NS.

Поскольку Objective-C является расширением C и, следовательно, не имеет пространств имен, как в C ++, символы должны иметь префикс с уникальным префиксом, чтобы они не сталкивались. Это особенно важно для символов, определенных в каркасе.

Если вы пишете приложение, так что ваш код, вероятно, когда-либо будет использовать ваши символы, вам не нужно беспокоиться об этом. Но если вы пишете фреймворк или библиотеку для использования другими людьми, вам также следует добавлять префиксы к своим символам. У CocoaDev есть страница, где многие разработчики в сообществе Cocoa перечислили свои «выбранные» префиксы. Вы также можете найти эту полезную дискуссию полезной.

Барри Уарк
источник
150

N Ext S ТЭП или N eXTSTEP / S ип в зависимости от того, кто вы спрашиваете.

Некоторое время Sun вкладывала в OpenStep довольно большие инвестиции. До того, как Sun вошла в картину, большинство вещей в фундаменте, хотя тогда он еще не назывался фундаментом, имели префикс NX для N e X T, а когда-то перед тем, как Sun вошел в картину, все было переименовано в NS . S , скорее всего , не стоять на солнце тогда , но после того, как ВС вышли в общем консенсусе в том , что он стоял на солнце , чтобы почтить их участие.

У меня действительно была ссылка для этого, но я не могу найти это прямо сейчас. Я обновлю пост, если / когда найду его снова.

Дэвид Холм
источник
4
Я слышал ту же историю из очень надежного источника; Я уверен, что это самый точный ответ здесь.
Тайлер
2
Я нашел ссылку: cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html
Саймон Вудсайд,
@SimonWoodside Ссылка мертва.
Динсдейл
Справочный интернет-архив: web.archive.org/web/20151008121657/http://www.cocoabuilder.com/…
Саймон Вудсайд
53

Это наследие NextStep (= NS). NeXT была компьютерной компанией, которую Стив Джобс создал после ухода из Apple в 1985 году, а NextStep - ее операционная система (на основе UNIX) вместе с языком Obj-C и средой исполнения. Вместе со своими библиотеками и инструментами NextStep был позже переименован в OpenStep (который также был названием API, который NeXT разрабатывал вместе с Sun), который в свою очередь позже стал Cocoa.

Эти разные имена на самом деле довольно запутанные (особенно потому, что некоторые имена отличаются только тем, какие символы в верхнем или нижнем регистре ...), попробуйте это для объяснения:

TheMerger OpenstepConfusion

Грегор
источник
4
Я мог бы поклясться, что Apple уволила его по разным причинам.
Фонд Моника иск
43

Из документации разработчика Apple:

Историческая справка: Если вам интересно, почему так много классов, с которыми вы сталкиваетесь, имеют префикс NS, это из-за прошлой истории Cocoa и Cocoa Touch. Какао начал свою жизнь как собранные платформы, используемые для создания приложений для операционной системы NeXTStep. Когда Apple приобрела NeXT в 1996 году, большая часть NeXTStep была включена в OS X, включая имена существующих классов. Cocoa Touch был представлен как iOS-эквивалент Какао; некоторые классы доступны как в Cocoa, так и в Cocoa Touch, хотя существует также большое количество классов, уникальных для каждой платформы. Двухбуквенные префиксы, такие как NS и UI (для элементов пользовательского интерфейса на iOS), зарезервированы для использования Apple.

Источник: Программирование с Objective-C

Джонатан Лин
источник
23

Из Какао_ (API) Википедия :

(выделение добавлено)

Классы какао начинаются с аббревиатуры «NS» (означающей либо создание OpenStep в NeXT-Sun , либо первоначальный собственный термин для среды OpenStep, NeXTSTEP ): NSString, NSArray и т. Д.

Foundation Kit , или чаще просто Foundation , впервые появился в OpenStep . В Mac OS X он основан на Core Foundation. Foundation - это универсальная объектно-ориентированная библиотека, обеспечивающая манипуляции со строками и значениями, контейнеры и итерации, распределенные вычисления, циклы выполнения и другие функции, которые не связаны напрямую с графическим интерфейсом пользователя. Приставка «NS» , используется для всех классов и констант в рамках, исходит из OPENSTEP наследия Какао, который был разработан совместно NeXT и Sun .

Чаун
источник
Википедия здесь не так. Foundation Kit впервые появился в Enterprise Objects Framework , которая предшествовала OpenStep. Кстати, версия Foundation для NeXT предположительно основывалась на CoreFoundation-подобном C API, но до Mac OS X
@ user23743, я не думаю, что ты прав. EOF предшествует операционной системе OPENSTEP, но не API-интерфейсу OpenStep. Документация EOF, на которую вы ссылались напрямую (ссылается на OpenStep) [ cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/… , и обе они были выпущены в 1994 году.
AriX,
12

Когда NeXT определяли API NextStep (в отличие от операционной системы NEXTSTEP), они использовали префикс NX, как в NXConstantString. Когда они писали спецификацию OpenStep с Sun (не путать с операционной системой OPENSTEP), они использовали префикс NS, как в NSObject.


источник
10

В основном NS происходит от N ext S TEP, оригинальной операционной системы, которая стала Mac OS X, когда Apple приобрела Next.

Я хочу объяснить что-то еще, и именно поэтому это необходимо.

В C ++ есть пространства имен и почти все идет в std

Вот почему у вас есть std :: string.

Используются пространства имен, поэтому вам сложнее ошибиться, и вы можете написать собственную строку класса, не конфликтуя с системной.

Objective-C является надмножеством C, но он не включает пространства имен и по той же причине выше всех системных классов имеет префикс NS или какой-то другой странный префикс.

Это то же самое, что все классы DirectX имеют префикс D3D и как все классы OpenGL имеют префикс gl .

Это означает, что вы не должны использовать NS для именования своих собственных классов, и когда вы видите NS , CA в Core Animation или CG в Core Graphics, вы понимаете, что это вызов системной платформы.

Swift меняет это соглашение, потому что Swift поддерживает пространство имен и отображает основные типы, такие как String, в эквиваленты NS.

Даниэль Георгиев
источник
6

Билл Бумгарнер aka @bbum, который должен знать , разместил в списке рассылки CocoaBuilder в 2005 году :

Sun вошел в картину немного позже, когда в игру вступил префикс NS. Префикс NS появился в открытых API при переходе с NeXTSTEP 3.0 на NeXTSTEP 4.0 (также известный как OpenStep). До 4.0 несколько символов использовали префикс NX, но большинство классов, предоставляемых системными библиотеками, не имели префикса вообще - List, Hashtable, View и т. Д.

Кажется, что все согласны с тем, что префикс NX (для NeXT) использовался до 1993/1994 года, и документы Apple говорят :

Официальный API OpenStep, опубликованный в сентябре 1994 года, был первым, кто разделил API между Foundation и Application Kit, и первым, кто использовал префикс «NS».

Саймон Вудсайд
источник