2011-05-22 217 views
5

我打算從我的應用程序發送郵件,並添加了MessageUI框架。在蘋果公司的示例代碼中,他們寫到:這些#import聲明有什麼區別?

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

這些和那裏的「斜線」在那裏有什麼區別?

回答

6

斜線基本上是說.h文件是在斜線之前命名的框架框架中。

兩者的區別在於,通過使用/MessageUI.h>,您可以像導入框架中的每個類一樣進行操作。當你使用/MFMailComposeViewController.h>時,你只能在框架中實現一個類。因此,除了導入的課程外,其他課程將不可用。

+0

技術上不正確,但它作爲解釋。 – JustSid 2011-05-22 21:59:10

+2

請問有什麼不對嗎?請糾正我,我會更新答案。 – 2011-05-22 22:03:28

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

是什麼, 和最新的「斜線」做有那些區別?

該工具集增加了對框架的支持,併爲框架定義了搜索路徑(例如用於標題和鏈接),並給定了構建設置。

框架定義了一個Headers/目錄。

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

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

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

有幾個原因可能會導致您偏好第一種形式,主要原因是易於維護。體貼的框架維護人員將確切地包括框架的頭部必須包含的內容,而不會出錯。

有幾個原因,您可以選擇後一種形式:

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