2017-03-10 169 views
0

我明白#import如何工作vs #include,整個「只有包含它,如果它不包含」的東西。我也明白,蘋果公司非常喜歡它們的Objective-C代碼#import,所以在Xcode中它不會去任何地方,一切都很好。爲什麼#import已被棄用?

我沒有得到的是在Android Studio等其他環境中,它表示#import已棄用,並在使用它時發出警告。這是爲什麼?

我的理解是,#import在功能上有所不同,在某些情況下,可以說比#include更好,這取決於您的需要。如果是這樣的話,爲什麼不推薦一個潛在有用的工具,特別是如果沒有任何跡象表明它被更好的東西取代?

是否有一些可怕的缺陷,使它完全不受歡迎使用,還是很好?

+0

'#import'不是有效的Java。你在說什麼? – Alexander

+0

@Alexander:可能OP正在討論可用於Android開發的c/C++。 –

+0

是的,很抱歉,如果您正在使用JNI,則可以在Java中使用C++代碼。 – DisturbedNeo

回答

0

因爲Objective-C是C編程語言的超集,所以#import語句是對C的#include語句的小修改。 #include聲明非常簡單;它會在編譯過程中將包含文件中發現的所有內容複製到您的代碼中。這有時會導致重大問題。這可以創建一個循環,並可以混淆編譯器。爲了解決這個問題,C程序員必須防範這種事件的發生。

當使用#import時,您不必擔心此問題或編寫標頭警衛來避免它。但是,#import仍然只是一個優化的複製和粘貼操作,導致其他一些較小但仍然非常危險的問題(例如,包含的文件覆蓋了您在其他代碼中聲明的某些內容)的編譯時間較慢。

從iOS的7,蘋果推出了導入文件的新方法:

@import UIKit; 

這是一個被稱爲模塊或「語義進口」的新功能。模塊是試圖解決上述問題。它們不再是對源代碼的複製和粘貼,而是包含文件的序列化表示,只有在需要時纔可以將它們導入到源代碼中。通過使用模塊,代碼將通常編譯得更快,並且比使用#include#import更安全。

要獲得更多這方面的信息,您可以觀看WWDC 2013

+0

我明白了,所以蘋果自己的Obj-C「@import」與普通的「#import」不同。這真的很有趣。但是,我不確定它是否回答了這個問題,但是,如果「#import」比「#include」有任何改進,在某些環境中被認爲不推薦使用。 – DisturbedNeo

相關問題