ios - @import 与 #import - iOS 7

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

@import UIKit;

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

最佳答案

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

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

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

模块是为大多数 Apple 框架(UIKit、MapKit、GameKit 等)预先构建的。你可以将它们与你自己创建的框架一起使用:如果你在 Xcode 中创建一个 Swift 框架,它们会自动创建,你可以为 any Apple or 3rd-party library 自己手动创建一个“.modulemap”文件。 .

您可以使用代码完成来查看可用框架的列表:

在 Xcode 5 的新项目中默认启用模块。要在旧项目中启用它们,请进入您的项目build设置,搜索“模块”并将“启用模块”设置为"is"。 “链接框架”也应该是"is":

您必须使用 Xcode 5 和 iOS 7 或 Mavericks SDK,但您仍然可以为较旧的操作系统(例如 iOS 4.3 或其他)发布。 模块不会改变您的代码的构建方式或任何源代码。


来自 WWDC 幻灯片:

  • Imports complete semantic description of a framework
  • Doesn't need to parse the headers
  • Better way to import a framework’s interface
  • Loads binary representation
  • More flexible than precompiled headers
  • Immune to effects of local macro definitions (e.g. #define readonly 0x01)
  • Enabled for new projects by default

显式使用模块:

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

您也可以使用此表示法只导入一个 header :

@import iAd.ADBannerView;

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

https://stackoverflow.com/questions/18947516/

相关文章:

ios - 文件是通用的(三个切片),但它不包含 iOS 上静态库的(n)ARMv7-s 切片错误,

ios - 应用程序在应用程序启动结束时应该有一个 Root View Controller

ios - 如何隐藏 UINavigationBar 1px 底线

objective-c - 比较浮点值有多危险?

objective-c - 在objective-c/cocoa中抛出异常

ios - 在 iOS 中获取当前设备语言?

iphone - 如何使用返回键关闭 UITextView 的键盘?

c - 是否可以使用 NSLog C 结构(如 CGRect 或 CGPoint)?

objective-c - Objective-C 中的#import 和#include 有什么区

objective-c - 关闭键盘的简单方法?