Xcode 6 / iOS 8 中全局导入文件的方式是不是发生了变化?

Posted

技术标签:

【中文标题】Xcode 6 / iOS 8 中全局导入文件的方式是不是发生了变化?【英文标题】:Did the way how to globally import files change in Xcode 6 / iOS 8?Xcode 6 / iOS 8 中全局导入文件的方式是否发生了变化? 【发布时间】:2014-11-20 07:34:31 【问题描述】:

我过去常常在文件 AppName-前缀中进行全局导入(即对我的 Xcode 项目中的所有源文件可见的导入)。 pch

但是,现在在 Xcode 6(和 ios 8)环境中,创建新项目后,不再自动生成此文件。

我的问题是如何在 Xcode 6 中正确地进行全局导入?我可以创建自己的 AppName-prefix.pch 并最终使用这个吗?

注意:使用 Cocoapods 时,名为 Pods-AppName-Bolts-prefix.pch 的文件是生成。但是全球导入不适用于这个。

【问题讨论】:

是的,不鼓励使用最新包含的 pch,因为它会增加构建时间并产生问题,好的做法是在必要的地方导入类,但如果你有很多类,那就很痛苦并且想要全局导入,您可以选择通过创建pch 文件手动进行。 【参考方案1】:

Apple 终于明白,拥有全局依赖是一种非常非常糟糕的做法。 理想情况下,您需要停止使用 PCH 文件,因为它会使其他文件非常混乱,并破坏代码重用。

无论如何,这是解决方案

    将新的PCH文件添加到项目中-新建文件>其他>PCH文件

    在项目“构建设置”选项 - 将“前缀标题”的值设置为您的 PCH 文件名,以项目名称作为前缀 - 即对于名为“TestProject”的项目和名为“MyPrefixHeaderFile”的 PCH 文件,将值“TestProject/MyPrefixHeaderFile.pch”添加到 plist。

【讨论】:

我将最终将我的记录器导入每个类中,你们说服了我! :) 另外,Apple 通常知道他们在诱导这种变化时在做什么,所以我想为了成为一个好公民,我会放弃我的全球进口计划......无论如何感谢您的澄清! :) 感谢您的回答。但我不明白为什么我们不应该使用全局导入。您能解释一下原因或给出一些指示吗? @sahara108 首先它会降低编译速度,这也是一种不好的做法,因为类不能移植到另一个项目(因为它们使用全局方法/宏/函数) 这很有趣。当我第一次开始使用 Xcode 时,我只是在需要的地方导入了头文件。但是后来我在 SO 上阅读了很多 cmets 以在 PCH 文件中进行操作。我遇到的一些问题与它有关。 宏的使用怎么样?你现在会把它们放在哪里?我一直在 PCH 文件中完成。【参考方案2】:

你可以创建你自己的,但关键是你不应该有全局依赖,你应该明确地只导入每个类所需的内容。实际上,在您的 .h 文件中,您应该努力使用 @class 来处理所有内容,并且只导入到您的 .m 文件中。这种方法使类的依赖关系非常清晰,并减少了依赖循环的可能性,这都是非常好的事情。

【讨论】:

我完全同意全球进口不是好的做法。我只是想用它来记录,以确保我的自定义 Logger 被导入到我的所有类中。有没有更好的方法来解决这个问题? @nburk 你需要在任何地方导入你的 Logger,或者使用继承来组合全局的东西。【参考方案3】:

在 Xcode 6 中,项目的 .pch 文件不再自动生成,但如果您需要,您可以自己创建一个 .pch 文件。如下执行此操作;

Goto->File->New->File->(Under iOS)Other->PCH File->Next

输入文件名并保存后,转到“构建设置”并将“前缀标题”的插入值设置为“YourProjectName/YourPCHFileName.pch”。如果“预编译前缀标头”设置为“否”,则将其更改为“是”。现在您可以将要导入的任何文件放在全局范围内,但将所有内容都放在此处并不是一个好习惯。

【讨论】:

@l0gg3r 抱歉,我正在输入您已经发布的答案,所以没有看到您的答案。是的,我检查了我的情况,你是对的。我需要遵循您提供的第二步。也感谢您的建议。

以上是关于Xcode 6 / iOS 8 中全局导入文件的方式是不是发生了变化?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 6 / iOS 8 Simulator Data 和 Bundle 文件夹脚本

如何将 openCV 导入 iOS 8 项目

无法使用 ios 8 加载 espeak-data xcode 6

总结iOS 8和Xcode 6的各种坑

安装 Xcode 6 iOS Simulator 8 后皮肤消失

自动布局不会在 iOS 8-Xcode 6 中立即更新帧