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

500

Многие классы в Cocoa/Cocoa Touch имеют префикс NS. Что это значит?

Теги:
cocoa
cocoa-touch

10 ответов

342
Лучший ответ

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

  • 7
    ... или, возможно, наследие NeXT / Sun (Sun была участником консорциума OpenStep)
  • 27
    Да, конечно. Все это прекрасно изложено в других ответах, поэтому я не стал копировать эту информацию в свою. Извините, если это кого-то оскорбляет - я не против, если принятый ответ изменится на другой (если это возможно - никогда не проверял).
Показать ещё 1 комментарий
679

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

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

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

  • 5
    Ссылка CocoaDev больше не работает
136

N eXT S TEP или N eXTSTEP/ S не зависит от того, о ком вы спрашиваете.

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

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

  • 4
    Я слышал ту же историю из очень надежного источника; Я уверен, что это самый точный ответ здесь.
  • 2
    Я нашел ссылку: cocoabuilder.com/archive/cocoa/136618-what-does-ns-means.html
47

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

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

TheMerger OpenstepConfusion

  • 4
    Я мог бы поклясться, что Apple уволила его по разным причинам.
36

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

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

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

19

Из Cocoa_ (API) Wikipedia:

(выделено курсивом)

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

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

  • 0
    Википедия здесь не так. Foundation Kit впервые появился в Enterprise Objects Framework , которая предшествовала OpenStep. Между прочим, версия Foundation для NeXT предположительно была основана на CoreFoundation-подобном C API, но до Mac OS X она не была представлена в качестве общедоступного интерфейса.
  • 6
    Ах, я только что отредактировал википедию :-).
Показать ещё 1 комментарий
8

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

5

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

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

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

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

4

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

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

В С++ существуют пространства имен и почти все идет в std

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

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

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

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

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

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

0

NextStep. Это перерыв с того момента, когда objective-c был создан NeXT для напишите nextstep (позже os x) и все связанные приложения и т.д. Они представляют элементы, которые не являются частью первоначальной основы C, например, в C нет элемента 'string', поэтому в objective-c, это дополнительный элемент фундамента "NSString".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню