在Xcode 5中是否不需要导入Quartz Core?

20

今天偶然发现一个问题,在Xcode 4.6中,如果我尝试访问CALayer而没有导入<QuartzCore/QuartzCore.h>,就会收到警告。但是相同的代码在Xcode 5中可以正常工作。


7
没错,我怀疑iOS7 SDK已经隐含地包含了这个框架,而iOS6没有。如果你想让你的项目在Xcode4和5上都能运行,那么这可能会成为一个问题。 - Warren Burton
我想请求SO将这个问题标记为社区维基。 - Rajan Balana
不确定,但我认为它是内置在Xcode 5中的。 - Hussain Shabbir
1个回答

27

是的,<QuartzCore/QuartzCore.h>会自动包含, 但这似乎更多是一个副作用而不是预期的结果,因为 它只是间接包含:

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

此外,Xcode 5有一个名为 "Link Frameworks Automatically" 的新构建设置,默认情况下是开启的(需要新的 "modules" 功能),因此也会将QuartzCore框架添加到链接库中。


1
这样简洁明了的解释真棒,加10分。PS:我仍然可以使用CALayer方法,而无需将其添加到二进制库中进行链接。 - Anonymous
我也注意到了,UISlider头文件特别冗长,因为ivars在类接口中声明(我们在那里学习到iOS 7设计被称为“look neue”)...这可能不是有意的! - Guillaume
1
@Anonymous:你说得对。我用的是最初在Xcode 4上创建的项目进行测试的。对于新的Xcode 5项目,默认情况下会自动链接引用库。我已相应地更新了答案。 - Martin R
1
@Martin:谢谢,这样就清楚了。根据苹果文档:当代码模块导入框架时,自动链接功能将被启用。当源文件包含来自支持模块的框架的头文件时,编译器会在目标文件中生成额外的信息以自动链接该框架。结果是,在大多数情况下,当您使用支持模块的框架API时,您将不需要指定要与目标链接的单独框架列表。 - Anonymous
@匿名:也许你可以添加一个文档链接,方便未来的读者。 - Martin R
完整文档:https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_5_0.html - Anonymous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接