我正在使用一些新的 iOS 7 功能并使用 WWDC 视频“在 iOS 上实现 Engaging UI”中讨论的一些图像效果。为了在会话的源代码中产生模糊效果,UIImage通过导入 UIKit 的类别进行了扩展,如下所示:
UIImage
@import UIKit;
我想我在另一个会话视频中看到了一些关于此的内容,但我找不到它。我正在寻找有关何时使用它的任何背景信息。它只能与 Apple 框架一起使用吗?使用这个编译器指令的好处是否足以让我回去更新旧代码?
这是一个称为 模块* 或“语义导入”的新功能。有关 Session 205和404的WWDC 2013视频中有更多信息。这是预编译头文件的一种更好的实现。 您可以将模块与 iOS 7 和 Mavericks 中的任何系统框架一起使用。 模块是框架可执行文件及其头文件的封装,被吹捧为比. *#import
#import
使用的一大优点@import是 你不需要在项目设置中添加框架,它是自动完成的 。这意味着您可以跳过单击加号按钮并搜索框架(金色工具箱)的步骤,然后将其移至“框架”组。它将许多开发人员从神秘的“链接器错误”消息中解救出来。
@import
您实际上不需要使用@import关键字。如果您选择使用模块,所有#import和#include指令都将被映射为@import自动使用。这意味着您不必更改源代码(或从其他地方下载的库的源代码)。据说使用模块也可以提高构建性能,特别是如果您没有很好地使用 PCH 或者您的项目有很多小源文件。
#include
模块是为大多数 Apple 框架(UIKit、MapKit、GameKit 等)预先构建的。您可以将它们与您自己创建的框架一起使用:如果您在 Xcode 中创建 Swift 框架,它们会自动创建,您可以为任何 Apple 或 3rd-party library自己手动创建一个“.modulemap”文件。
您可以使用代码完成来查看可用框架的列表:
Xcode 5 的新项目中默认启用模块 。要在旧项目中启用它们,请进入您的项目构建设置,搜索“模块”并将“启用模块”设置为“是”。“链接框架”也应该是“是”:
您必须使用 Xcode 5 和 iOS 7 或 Mavericks SDK,但您仍然可以为较旧的操作系统(比如 iOS 4.3 或其他)发布。 模块不会更改您的代码的构建方式或任何源代码。
来自 WWDC 幻灯片:
导入框架的完整语义描述 不需要解析标题 导入框架界面的更好方法 加载二进制表示 比预编译头文件更灵活 不受本地宏定义的影响(例如#define readonly 0x01) 默认为新项目启用
#define readonly 0x01
要显式使用模块:
替换#import <Cocoa/Cocoa.h>为@import Cocoa;
#import <Cocoa/Cocoa.h>
@import Cocoa;
您也可以使用此表示法仅导入一个标头:
@import iAd.ADBannerView;
Xcode 中的子模块会自动完成。