Каково значение знаков #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 -который создает линию.

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


Оцените ответ - сможете ли вы опубликовать обновленный ответ, показывающий, как выглядят метки прагмы (в этом меню или где бы они ни находились сейчас) в новом 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, но оно не влияет на ваш код. Это просто помогает упростить поиск методов при кодировании.


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 , которая хорошо справляется со своей работой.

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


7
#pragma mark - NSSecureCoding

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

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

Xcode 11+:

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

// MARK: - Properties

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

// MARK: - Properties - 

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

// MARK: Properties -

Так я могу удалить строку? пустая трата места для моего мозга.

1
Удаление # pragma-mark не повлияет на любую функциональность вашего кода, но ваш код может потерять свою читабельность. Если вы действительно не хотите, вы можете удалить его.
Джеба Моисей
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.