为什么#import已被弃用?

时间:2017-03-10 18:14:37

标签: objective-c xcode android-studio

我理解#import如何与#include合作,整个“仅包括它,如果它还没有被包含”的东西。我也明白Apple非常喜欢#import的Objective-C代码,所以在Xcode中它不会去任何地方,一切都很好。

我没有得到的是在其他环境中,例如Android Studio,它说#import已被弃用,如果您使用它会发出警告。那是为什么?

我的理解是#import在功能上有所不同,在某些情况下,可能比#include更好,这取决于您的需求。如果是这种情况,为什么要弃用一个可能有用的工具,特别是如果没有任何迹象表明它被更好的替换?

是否存在一些令人骇人听闻的缺陷,使其完全不受欢迎,或者它是否合适?

1 个答案:

答案 0 :(得分:1)

因为Objective-C是C编程语言的超集,所以#import语句是对C #include语句的一个小改进。 #include语句非常简单;它会在编译期间将它在包含文件中找到的所有内容复制到您的代码中。这有时会导致严重的问题。这可能会创建一个循环,并可能混淆编译器。为了解决这个问题,C程序员必须针对此类事件编写防范措施。

使用#import时,您无需担心此问题或编写标题保护以避免此问题。但是,#import仍然只是一个美化的复制粘贴操作,导致许多其他较小但仍然非常危险的问题(例如,包含的文件覆盖您在自己的代码中已在其他地方声明的内容)的编译时间较慢。)

从iOS 7开始,Apple引入了一种导入文件的新方法:

@import UIKit;

这是一个名为模块或“语义导入”的新功能。模块试图解决上述问题。它们不再是复制并粘贴到源代码中,而是包含的文件的序列化表示,只有在需要时才能将其导入到源代码中。通过使用模块,代码通常编译得更快,比使用#include#import更安全。

要获得有关此内容的更多信息,您可以观看WWDC 2013