2011-05-22 110 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。具体的包含可以最大限度地减少问题/依赖关系的数量,或者您可以选择性地包含必要的内容。