Каково значение знаков #pragma? Зачем нам нужны знаки #pragma?

279

Какова цель #pragmaмаркировки в Xcode? Имеет ли значение их расположение в .mфайлах? Должны ли некоторые #pragmaприйти впереди всех других?

  • Должны ли они присутствовать?
  • Можно ли добавлять новые оценки? Зачем им быть? Что вызывает это?
  • Есть ли вред в удалении знака? Хотел бы кто-нибудь?
Джеймс Райцев
источник
5
Проверьте ссылку: cocoasamurai.blogspot.com/2006/09/…
rptwsthi
Мне лично они не нравятся. Серьезно, вы хотите думать о том, где вы должны все время ставить метод? Есть гораздо более важные вещи, которые нужно поддерживать, например, уделять внимание принципу единой ответственности
Брэд Томас,
2
Для быстрого языка #Pragma mark не будет работать. Используйте #MARK или #FIXME или #TODO, проверьте эту ссылку для получения дополнительной информации stackoverflow.com/a/33040068/1753005
Jayprakash Dubey

Ответы:

315

#pragma markдирективы появляются в Xcode в меню для прямого доступа к методам. Они никак не влияют на программу.

Например, использование его с Xcode 4 заставит эти элементы появиться непосредственно в панели переходов.

Существует специальный, pragma mark -который создает линию.

введите описание изображения здесь

Erre Efe
источник
Оцените ответ - сможете ли вы опубликовать обновленный ответ, показывающий, как выглядят метки прагмы (в этом меню или где бы они ни находились сейчас) в новом XCode?
user7804781
Есть ли эквивалент Python?
Эдвард Фальк
@EdwardFalk Это специфично для IDE, так что это действительно зависит от вашей IDE / текстового редактора
Майкл Озерянский
Мой компилятор GCC выдал предупреждение, foo.h: 52: 0: warning: игнорирование #pragma mark [-Wunknown-pragmas] #pragma mark -, что не является фатальным. Так что gcc, вероятно, не знает о '-'.
Кемин Чжоу
55

#pragma markиспользуется для обозначения группы методов, чтобы вы могли легко находить и обнаруживать методы из панели переходов. Это может помочь вам, когда ваши файлы кода достигают около 1000 строк, и вы хотите быстро найти методы через категорию из поля «Перейти».

В длинной программе становится трудно запомнить и найти имя метода. Таким образом, прагма позволяет вам классифицировать методы в соответствии с работой, которую они делают. Например, вы пометили какой-то тег для методов протокола табличного представления, методов AlertView, методов инициализации, объявления и т. Д.

#pragma markэто средство для XCode, но оно не влияет на ваш код. Это просто помогает упростить поиск методов при кодировании.

dayitv89
источник
21

Проще говоря, мы можем сказать, что #pragma mark -он используется для классификации методов, поэтому вы можете легко найти свои методы. Это очень полезно для длинных проектов.

геймер
источник
13

Просто чтобы добавить информацию, которую я искал: pragma markспецифичен для XCode, поэтому, если вы имеете дело с проектом C ++, который вы открываете в разных IDE, это не имеет никакого эффекта. Например, в Qt Creator он не добавляет категории для методов и не генерирует никаких предупреждений / ошибок.

РЕДАКТИРОВАТЬ

#pragmaдиректива препроцессора, пришедшая из языка программирования Си Его цель - указать зависящую от реализации информацию для компилятора, то есть каждый компилятор может интерпретировать эту директиву так, как он хочет. Тем не менее, это скорее считается расширением, которое не меняет / не влияет на сам код. Таким образом, компиляторы могут игнорировать это.

Xcode - это IDE, которая #pragmaиспользует его и использует его по-своему. Дело в том, что #pragmaэто не Xcode и даже не Objective-C.

Максим Четруска
источник
11

Когда у нас большой / длинный класс, скажем, более пары сотен строк кода, мы не можем видеть все на экране монитора, следовательно, мы не можем видеть обзор (также называемый элементами документа) нашего класса. Когда-нибудь мы хотим увидеть обзор нашего класса; все методы, константы, свойства и т. д. с первого взгляда. Вы можете нажать Ctrl + 6 в XCode, чтобы увидеть обзор вашего класса. Вы получите всплывающее окно Window aka Jump Bar.

По умолчанию эта панель перехода не имеет сегментов / сегментов. Это всего лишь один длинный список. (Хотя мы можем просто начать печатать, когда появится панель перехода, и она будет искать среди элементов панели перехода). Здесь приходит необходимостьpragma mark

Если вы хотите создать разделы на панели переходов, вы можете использовать прагма с соответствующим описанием. Теперь обратитесь к снимку, прикрепленному в вопросе. Там «View lifeCycle» и «Раздел, посвященный ..» являются разделы, созданные pragma marks

Саурабх Худа
источник
10

В поисках документа, указывающего на то, как прагма являются директивами для компилятора, я нашел эту статью NSHipster , которая хорошо справляется со своей работой.

Я надеюсь, вам понравится чтение

teriiehina
источник
7
#pragma mark - NSSecureCoding

Основное назначение «прагмы» - для разработчиков.введите описание изображения здесь

Вы можете легко найти метод / функцию в огромных тысячах строк кода.

Xcode 11+:

Маркерная линия в топе

// MARK: - Properties

Маркерная линия сверху и снизу

// MARK: - Properties - 

Маркерная линия только внизу

// MARK: Properties -
Джеба Моисей
источник
Так я могу удалить строку? пустая трата места для моего мозга.
1
Удаление # pragma-mark не повлияет на любую функциональность вашего кода, но ваш код может потерять свою читабельность. Если вы действительно не хотите, вы можете удалить его.
Джеба Моисей