簡體   English   中英

這些#import聲明之間有什么區別?

[英]What is the difference between these #import declarations?

我將從我的應用程序發送郵件,並添加了MessageUI框架。 在Apple的示例代碼中,他們寫道:

#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

這些之間的區別是什么,以及“斜線”在那里做什么?

斜杠基本上是說.h文件位於斜杠之前命名的框架的框架中。

兩者之間的區別在於,通過使用/MessageUI.h>您在執行與導入框架中的每個類相同的操作。 當您使用/MFMailComposeViewController.h>您只在框架中實現一個類。 因此,除了導入的類之外,不會有其他類可用。

 #import <MessageUI/MessageUI.h> #import <MessageUI/MFMailComposeViewController.h> 

這些之間的區別是什么,以及“斜線”在那里做什么?

工具集添加了對框架的支持,並在給定構建設置的情況下定義框架的搜索路徑(例如,標題和鏈接)。

框架定義了Headers/目錄。

使用此方法,可以在使用路徑分隔符( / )分隔時解析/發現框架路徑。

使用apple的框架,第一個成語#import <FRAMEWORK_NAME/FRAMEWORK_NAME.h>是通過包含(大部分)框架的公共頭文件來包含框架的通用聲明的常用方法。 在許多情況下,它將包括所有框架的公共標頭,但也有一些例外。 在程序中使用這個習慣用法通常是最好的,因為它可以使你從標題的內部依賴性中隔離出來,這些依賴性很可能會在各個版本中發生變化。

第二種形式與第一種形式類似,因為它們都指定了要包含的特定標題。 它的不同之處在於您明確地包含了一個特定的標題 - 在大多數情況下,這意味着您只包含框架標題的一部分(當框架的主要包含結構為apple方式時)。 許多庫不是以這種方式使用的 - 編譯器可能會遇到未聲明的類型(作為示例)。 在這種情況下,如果遇到構建錯誤,則必須包含標頭的其他依賴項。

您可能更喜歡第一種形式有幾個原因,主要原因是易於維護。 體貼的框架維護者將准確地包括框架的頭部必須包含的內容而不會出錯。

還有一些理由可以選擇后一種形式:

  • 語言差異:框架可能使用多種語言。 根據正在編譯的語言/方言,包括整個框架可能顯然會引入構建錯誤。
  • 您只需要外部翻譯可見的框架聲明的一部分:指定您需要顯示的標頭可以減少構建時間和依賴性。
  • 兼容性和最小依賴性:假設您已經編寫了一個針對多個平台(例如osx和ios)的庫。 您的圖書館可能使用不同的框架/ apis。 特定的包含可以最小化問題/依賴的數量,或者您可以選擇性地包括必要的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM