#pragma 标记的意义​​是啥?为啥我们需要#pragma 标记?

Posted

技术标签:

【中文标题】#pragma 标记的意义​​是啥?为啥我们需要#pragma 标记?【英文标题】:What is the significance of #pragma marks? Why do we need #pragma marks?#pragma 标记的意义​​是什么?为什么我们需要#pragma 标记? 【发布时间】:2011-10-14 19:01:35 【问题描述】:

Xcode 中#pragma 标记的目的是什么?他们在.m 文件中的位置重要吗?一些#pragma 应该排在所有其他人之前吗?

他们必须在场吗? 可以添加新标记吗?他们为什么会这样?是什么原因造成的? 删除标记有什么害处吗?有人愿意吗?

【问题讨论】:

查看链接:cocoasamurai.blogspot.com/2006/09/… 我个人不喜欢它们。说真的,你想一直想着你必须把一个方法放在哪里?还有更重要的事情要保持井井有条,比如注意单一职责原则 对于快速语言#Pragma 标记将不起作用。使用#MARK 或#FIXME 或#TODO 检查此链接以获取更多信息***.com/a/33040068/1753005 ***.com/a/36953187/443530 【参考方案1】:

#pragma mark 指令显示在 Xcode 的菜单中,用于直接访问方法。它们对程序完全没有影响。

例如,在 Xcode 4 中使用它会使这些项目直接出现在跳转栏中。

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

【讨论】:

感谢您的回答——您能否发布一个更新的答案,显示新 XCode 中的杂注标记是什么样子(在该菜单中或它们现在的任何位置)? 是否有 Python 等价物? @EdwardFalk 它是 IDE 特定的,所以它真的取决于你的 IDE/文本编辑器 我的 GCC 编译器给出了警告,foo.h:52:0: warning: ignoring #pragma mark [-Wunknown-pragmas] #pragma mark -,这不是致命的。所以gcc可能不知道'-'。【参考方案2】:

#pragma mark 用于标记方法组,以便您可以轻松地从跳转栏找到和检测方法。当您的代码文件达到大约 1000 行并且您想通过跳转框的类别快速找到方法时,它可能会为您提供帮助。

在一个长程序中,很难记住和找到方法名。所以 pragma mark 允许您根据它们所做的工作对方法进行分类。例如,您为 Table View Protocol Methods、AlertView Methods、Init Methods、Declaration 等标记了一些标签。

#pragma mark 是 XCode 的工具,但它对您的代码没有影响。它只是有助于在编码时更容易找到方法。

【讨论】:

【参考方案3】:

简单来说,我们可以说#pragma mark - 用于对方法进行分类,因此您可以轻松找到您的方法。这对于长期项目非常有用。

【讨论】:

【参考方案4】:

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

编辑

#pragma 是来自 C 编程语言的预处理指令。它的目的是为编译器指定与实现相关的信息——也就是说,每个编译器都可以根据需要选择解释该指令。也就是说,它被认为是一个不会改变/影响代码本身的扩展。所以编译器不妨忽略它。

Xcode 是一个利用#pragma 并以自己特定方式使用它的IDE。关键是,#pragma 不是 Xcode 甚至是 Objective-C 特定的。

【讨论】:

【参考方案5】:

当我们有一个大/冗长的类说超过 100 行代码时,我们无法在监视器屏幕上看到所有内容,因此我们无法看到我们类的概述(也称为文档项)。有时我们想查看我们班级的概述;它的所有方法、常量、属性等一目了然。您可以在 XCode 中按 Ctrl+6 来查看您的课程概览。您将获得一种弹出式窗口,即 Jump Bar。

默认情况下,此跳转栏没有任何存储桶/部分。这只是一长串清单。 (虽然我们可以在跳转栏出现时开始输入,它会在跳转栏项目中搜索)。这里需要pragma mark

如果您想在跳转栏中创建部分,则可以使用带有相关描述的编译指示标记。现在参考有问题的快照。 'View lifeCycle' 和 'A section dedicated ..' 是由pragma marks 创建的部分

【讨论】:

【参考方案6】:

在搜索 doc 以指出编译器如何指示编译指示时,我发现这个 NSHipster article 做得很好。

我希望你会喜欢阅读

【讨论】:

【参考方案7】:
#pragma mark - NSSecureCoding

“pragma”的主要目的是供开发者参考。

您可以在成千上万行代码中轻松找到方法/函数。

Xcode 11+:

顶部的标记线

// MARK: - Properties

顶部和底部的标记线

// MARK: - Properties - 

标记线仅在底部

// MARK: Properties -

【讨论】:

所以我可以删除该行吗?它浪费了我的大脑空间。 删除 #pragma-mark 不会影响代码的任何功能,但您的代码可能会失去可读性。如果你真的不想要,你可以删除它。

以上是关于#pragma 标记的意义​​是啥?为啥我们需要#pragma 标记?的主要内容,如果未能解决你的问题,请参考以下文章

“#pragma 评论”是啥意思?

#pragma execution_character_set的意义

Android Studio 中的 #pragma 标记等效项

SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 应为“ON”

Lava是啥?为啥说Lava做的是有意义的事?

放置 make_public pragma 的推荐位置是啥