【问题标题】:Objective C @import for modules does it replace #import?用于模块的目标 C @import 是否取代了#import?
【发布时间】:2013-09-30 04:19:41
【问题描述】:

Xcode 5Objective-C 中的新语法是 @import,用于导入框架。

详情请参阅question。优点是您不必在项目中包含框架以避免链接器错误,您不需要在框架名称中添加引号和 .h,预编译头文件速度更快,并且您有一个命名空间防止您意外重命名符号。所有不错的补充。

我的问题是,对于您自己的文件,例如 MyFancyViewController.h,您是继续使用#import 还是将其完全替换为@import?另外,我可以轻松定义自己的模块吗?在同一个文件中使用两种语法看起来更混乱。

【问题讨论】:

标签: ios objective-c macos cocoa xcode5


【解决方案1】:

对于您包括您的项目文件,您是继续使用#import 还是使用@import 完全取代它?

@import,到目前为止,仅适用于 Apple 框架,因此在撰写本文时,您仍然必须将 #import 用于其他任何东西。
好消息是,如果您选择加入,任何 #import 都将被编译器隐式替换,因此您无需转换之前的代码即可从模块中受益。

另外,我可以轻松定义自己的模块吗?

是和不是。
是的,这很容易,但是...
...不,您不能,因为目前非 Apple 框架不支持此功能。

要定义自己的模块——如果可以的话——你需要这样做:

export MyAwesomeModule:
public:
   // methods and whatever you want to export

【讨论】:

  • 不错的答案!像往常一样;)
  • 创建自己的模块的方法是使用module maps。我还没有真正尝试过,但是您应该可以使用它来创建自己的模块。
【解决方案2】:

@import 仅适用于官方框架。对于MyFancyViewController.h,请继续使用#import

【讨论】:

  • 虽然 @import 很方便,但 Xcode 会在编译时自动将任何 Apple 框架的 #imports 转换为 @imports - 因此您根本不必使用 @import 关键字,并且仍然可以获得好处。
  • 它与其说是转换它,不如说是导致#import 表现得像@import——你的文件保持不变。请注意,这也仅对新项目是自动的。对于现有项目,请在构建设置中开启启用模块
  • 在 iOS 8 中,似乎可以编写自己的框架,因此使用@import 将适用于您自己的代码,并且受到鼓励。
  • @possen 谢谢。我稍后会检查并更新答案。
猜你喜欢
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 2018-03-30
相关资源
最近更新 更多