【问题标题】:Quartz Core Import not required in Xcode 5?Xcode 5 中不需要石英核心导入?
【发布时间】:2013-12-29 08:44:01
【问题描述】:

今天偶然发现了这个。如果我尝试在不导入 <QuartzCore/QuartzCore.h> 的情况下访问 CALayer,我会在 Xcode 4.6 中收到警告。但是在 Xcode 5 中同样可以正常工作。

【问题讨论】:

  • 是的,这是真的。我怀疑 iOS7 SDK 现在隐含地包含了这个框架,而 iOS6 没有。如果您试图让您的项目同时在 Xcode4 和 5 上运行,这只会是一个问题
  • 我想请求 SO 将此问题标记为 Community Wiki。
  • 不确定,但我认为它是 Xcode 5 内置的

标签: ios objective-c xcode5 quartz-core


【解决方案1】:

是的,<QuartzCore/QuartzCore.h> 会自动包含在内, 但这似乎是比预期更多的副作用,因为 它只是间接包含:

  • <UIKit/UIKit.h> 包括<UIKit/UISlider.h>
  • 在iOS 7 SDK中,<UIKit/UISlider.h>包含<QuartzCore/QuartzCore.h>, 由于UISlider 类(CAShapeLayer 类型)中的新实例变量。

此外,Xcode 5 有一个新的构建设置“自动链接框架”,它是由 默认开启(并且需要新的“模块”功能),以便 QuartzCore 框架 也被添加到链接库中。

【讨论】:

  • +10 以获得如此简洁明了的解释。PS:我仍然可以使用 CALayer 方法,而无需将其添加到带有二进制库的链接中
  • 我也注意到了,UISlider 头文件特别冗长,因为 ivars 是在类接口中声明的(我们了解到 iOS 7 的设计被称为“look neue”) ...这可能不是故意的!
  • @Anonymous:你是对的。我使用最初使用 Xcode 4 创建的项目对其进行了测试。使用新的 Xcode 5 项目时,默认情况下会自动链接引用的库。我已经相应地更新了答案。
  • @Martin:谢谢.. 清除它。来自苹果文档:Auto Linking is enabled for frameworks imported by code modules. When a source file includes a header from a framework that supports modules, the compiler generates extra information in the object file to automatically link in that framework. The result is that, in most cases, you will not need to specify a separate list of the frameworks to link with your target when you use a framework API that supports modules.
  • @Anonymous:也许您可以添加指向该文档的链接,以方便未来的读者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多