小编典典

@import 与 #import - iOS 7

all

我正在使用一些新的 iOS 7 功能并使用 WWDC 视频“在 iOS 上实现 Engaging
UI”中讨论的一些图像效果。为了在会话的源代码中产生模糊效果,UIImage通过导入 UIKit 的类别进行了扩展,如下所示:

@import UIKit;

我想我在另一个会话视频中看到了一些关于此的内容,但我找不到它。我正在寻找有关何时使用它的任何背景信息。它只能与 Apple
框架一起使用吗?使用这个编译器指令的好处是否足以让我回去更新旧代码?


阅读 131

收藏
2022-03-16

共1个答案

小编典典

这是一个称为 模块* 或“语义导入”的新功能。有关 Session
205
404的WWDC
2013
视频中有更多信息。这是预编译头文件的一种更好的实现。
您可以将模块与 iOS 7 和 Mavericks 中的任何系统框架一起使用。
模块是框架可执行文件及其头文件的封装,被吹捧为比.
*#import

使用的一大优点@import你不需要在项目设置中添加框架,它是自动完成的
。这意味着您可以跳过单击加号按钮并搜索框架(金色工具箱)的步骤,然后将其移至“框架”组。它将许多开发人员从神秘的“链接器错误”消息中解救出来。

您实际上不需要使用@import关键字。如果您选择使用模块,所有#import#include指令都将被映射为@import自动使用。这意味着您不必更改源代码(或从其他地方下载的库的源代码)。据说使用模块也可以提高构建性能,特别是如果您没有很好地使用
PCH 或者您的项目有很多小源文件。

模块是为大多数 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
  • 默认为新项目启用

要显式使用模块:

替换#import <Cocoa/Cocoa.h>@import Cocoa;

您也可以使用此表示法仅导入一个标头:

@import iAd.ADBannerView;

Xcode 中的子模块会自动完成。

2022-03-16