【问题标题】: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 文件手动进行。

标签: ios objective-c xcode ios8 xcode6


【解决方案1】:

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

无论如何,这是解决方案

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

  2. 在项目“构建设置”选项 - 将“前缀标题”的值设置为您的 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 抱歉,我正在输入您已经发布的答案,所以没有看到您的答案。是的,我检查了我的情况,你是对的。我需要遵循您提供的第二步。也感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 2014-12-12
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
相关资源
最近更新 更多