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 文件夹脚本
无法使用 ios 8 加载 espeak-data xcode 6