“#pragma marks”的意义是什么?我们为什么需要使用“#pragma marks”?

293

#pragma标记在Xcode中的目的是什么?它们在.m文件中的位置是否重要?某些#pragma需要先于其他所有标记出现吗?

  • 它们必须存在吗?
  • 可以添加新标记吗?为什么会这样做?是什么导致了这种情况?
  • 删除标记是否会有任何危害?有没有人想要这样做?

我个人不喜欢它们。说真的,你想一直考虑方法放在哪里吗?有更重要的事情需要组织,比如关注单一职责原则。 - Bradley Thomas
2
对于Swift语言,#Pragma标记不起作用。请使用#MARK或#FIXME或#TODO。查看此链接以获取更多信息https://dev59.com/LWAg5IYBdhLWcg3wDHfS#33040068 - Jayprakash Dubey
https://dev59.com/xmcs5IYBdhLWcg3wHwNH#36953187 - akshay1188
这是字面意义上的 #pragma mark 吗? - Peter Mortensen
6个回答

322

#pragma mark 指令在 Xcode 中显示为菜单,可直接访问方法。它们对程序没有任何影响。

例如,在 Xcode 4 中使用它将使这些项目直接出现在 Jump Bar 中。

有一个特殊的 #pragma mark - 可以创建一条线。

enter image description here


感谢您的回答 - 您能否发布一个更新的答案,展示在新的XCode中Pragma标记的外观(在菜单或任何其他地方)? - user7804781
有Python的等价物吗? - Edward Falk
@EdwardFalk 这是与IDE相关的,所以它取决于您使用的IDE /文本编辑器。 - Michael Ozeryansky
我的GCC编译器发出了警告,foo.h:52:0: warning: ignoring #pragma mark [-Wunknown-pragmas] #pragma mark -,这不是致命的。所以gcc可能不知道“-”。 - Kemin Zhou

56

#pragma mark 用于标记方法组,使您可以轻松地从Jump Bar中查找和检测方法。当您的代码文件达到约1000行时,它可以帮助您通过Jump Box类别快速查找方法。

在长程序中,记住和查找方法名称变得困难。因此,pragma mark 允许您根据它们执行的工作对方法进行分类。例如,您可以将一些标签用于Table View Protocol 方法、AlertView 方法、Init 方法、Declaration 等。

#pragma mark 是Xcode的功能,但不会影响您的代码。它只是帮助您在编码时更容易找到方法。


22

简单来说,#pragma mark - 用于对方法进行分类,以便您可以轻松地找到自己的方法。在长期项目中非常有用。


15

补充我在寻找的信息: pragma mark 是Xcode特有的,因此如果您处理的是C++项目并在不同的IDE中打开它,则它在那里没有任何影响。例如,在Qt Creator中,它不会为方法添加类别,也不生成任何警告/错误。

#pragma是来自C编程语言的预处理器指令。它的目的是向编译器指定与实现相关的信息 - 也就是说,每个编译器可能选择按照自己的方式解释此指令。也就是说,它被认为是不改变/影响代码本身的扩展。所以编译器也可能忽略它。

Xcode是一种利用#pragma并以其自己的特定方式使用它的IDE。重点是,#pragma不是Xcode甚至Objective-C特有的。


11

当我们拥有一个大而冗长的类,比如几百行代码时,我们不可能在显示器屏幕上看到全部内容,因此无法看到我们类的概述(也称为文档项)。 有时候我们想要一览类的概述;其所有方法、常量、属性等。 您可以在Xcode中按Ctrl + 6来查看您的类的概述。您将获得一个名为Jump Bar的弹出窗口。

默认情况下,这个跳转栏没有任何部分/区域。它只是一个很长的列表。(尽管当跳转栏出现时,我们可以开始键入,并且它将搜索跳转栏项目。)这就需要使用pragma mark了。

如果您想要在Jump Bar中创建部分,则可以使用具有相关描述的pragma mark。现在请参阅问题中附加的快照。那里的“View lifeCycle”和“专用部分 ...”是由pragma mark创建的节。


11

使用:

#pragma mark - NSSecureCoding

"pragma" 的主要目的是为开发者提供参考。

Enter image description here

您可以在庞大的数千行代码中轻松找到一个方法/函数。

Xcode 11+:

顶部标记线

// MARK: - Properties

顶部和底部的标记线

// MARK: - Properties -

仅在底部显示标记线

// MARK: Properties -

那我可以删掉这行吗?对我的大脑来说,它只是占用空间。 - user285594
2
删除 #pragma-mark 不会影响代码的任何功能,但您的代码可能会失去可读性。如果您真的不想要,可以将其删除。 - Jeba Moses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接