首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS Prefix.pch最佳实践

iOS Prefix.pch最佳实践
EN

Stack Overflow用户
提问于 2010-05-17 03:49:01
回答 4查看 40.6K关注 0票数 91

我见过许多开发人员在他们的iOS项目的Prefix.pch中添加各种方便的宏。

您建议在iOS Prefix.pch文件中添加(或不添加)什么?你的Prefix.pch是什么样子的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-17 11:02:38

Ewww…不要将宏放在.pch文件中!根据定义,.pch文件是特定于项目的预编译头文件。它真的不应该在项目的上下文之外使用,它真的不应该包含任何东西,除了#include#import

如果你有一些宏,你想要在头文件之间共享,那么把它们放在它们自己的头文件中-- Common.h或者其他什么--然后在.pch的开头使用#include

票数 122
EN

Stack Overflow用户

发布于 2013-10-03 03:59:20

对于现代的iOS和OS,人们应该使用模块。默认情况下,这对于新项目是启用的,并且导入/包含是使用@import完成的。

模块允许编译器创建模块内容(例如框架的头部)的中间表示。就像PCH一样,这种中间表示可以在多个翻译之间共享。但是模块更进一步,因为模块不一定是特定于目标的,并且它们的声明不需要本地化(到*.pch)。这种表示方式可以节省大量冗余的编译工作。

使用模块,您不需要PCH,并且您可能应该完全删除它们--支持使用依赖项的本地@import。在这种情况下,PCH只会使您不必键入依赖项的本地包含(我认为您无论如何都应该这样做)。

现在,如果我们回到最初的问题:你应该避免用各种随机的东西填充你的PCH;宏,常量,#defines,和各种各样的小库。通常,您应该省略对于大多数源文件来说确实不必要的内容。在你的PCH中放入各种各样的东西只会增加一堆重量和依赖性。我看到人们把他们链接的所有东西都放在PCH中。实际上,在大多数情况下,辅助框架通常只需要对少数翻译可见。例如。“这是我们的StoreKit内容--让我们只在可见的地方导入StoreKit。具体来说,这三种翻译。”这可以缩短您的构建时间,并帮助您跟踪依赖项,以便您可以更轻松地重用代码。因此,在ObjC项目中,您通常会止步于基础。如果有很多UI,那么您可以考虑在PCH中添加UIKit或AppKit。这都是假设你想要优化构建时间。包含(几乎)所有内容的大型PCH的问题之一是,删除不必要的依赖非常耗时。一旦项目的依赖项增加,构建时间增加,您就需要通过消除不必要的依赖项来进行反击,以减少构建时间。此外,任何经常变化的东西通常都应该放在你的PCH之外。更改需要完全重建。有一些共享PCH的选项。如果你使用PCH,一定要支持共享。

就我在我的PCH中的内容而言:我几年前就不再将它们用于绝大多数目标。通常情况下,没有足够的共同点来达到资格。请记住,我编写了C++、ObjC、ObjC++和C语言-编译器为目标中的每个语言发出一个。因此,启用它们通常会导致较慢的编译时间和较高的I/O。最终,增加依赖关系不是对抗复杂项目中依赖关系的好方法。使用多种语言/方言时,给定目标所需的依赖项有很大变化。不,我不会建议这对每个项目都是最优的,但这确实为大型项目中的依赖管理提供了一些视角。

参考文献

  • http://clang.llvm.org/docs/Modules.html
  • http://clang.llvm.org/docs/PCHInternals.html

备注

  • 这个问题最初是在模块的introduction.
  • Presently (Xcode5.0)之前几年提出的,模块可以在C和ObjC上工作,但不能在C++上工作。
票数 38
EN

Stack Overflow用户

发布于 2010-12-11 07:55:37

我同意bbum的观点。我对PCH文件的看法是,它应该几乎只包含#include#import语句。因此,如果您有一堆有用的高级宏,请按照bbum的建议在Common.h#import之类的文件中定义它们。

我通常会更进一步,使用PCH文件来#import一个名为XXCategories.h的文件(其中XX是您使用的类命名前缀约定),其中包含用于所有my UIKit和Foundation类类别的#importNSString+XXAdditions.hUIColor+XXAdditons.h等。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2845211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档