zoukankan      html  css  js  c++  java
  • #include,#import,@class的区别

    #include

            #include  <>    :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件。
     
            #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。
     
           注:使用include要注意重复引用的问题:
     
           class A,class B都引用了class C,class D若引用class A与class B,就会报重复引用的错误。
     
    #import
          功能与include基本相同,不过它避免了重复引用的问题。所以在OC中我们基本用的都是import。
     
    @class
          @class就是告诉编译器有这个类存在,但是类是如何实现的不用告诉编译器.若.m文件用到了这个类,还是要在.m文件汇总import这个类的。
          既然这样,为什么不直接在头文件中import呢,举个例子:
          class A引用了class B,class B引用了class C.... , class A,B,C...的头文件又import了很多文件,那么 import了A的话,编译器就需要编译大量的文件,编译时间就会增加。 
     
          难道头文件中都是用@class吗?当然不是,有时也是需要#import的,那么什么时候该用什么呢?
    (1)一般如果有继承关系的用#import,如B是A的子类那么在B中声明A时用#import;
     
    (2) 另外就是如果有循环依赖关系,如:A->B,B->A这样相互依赖时,如果在两个文件的头文件中用#import分别声明对方,那么就会出现头文件循环利用的错误,这时在头文件中用@class声明就不会出错;
     
    (3)还有就是自定义代理的时候,如果在头文件中想声明代理的话如@interface SecondViewController:UIViewController时应用#import不然的话会出错误,注意XXXXDelegate是自定义的。
  • 相关阅读:
    [转]win7 系统装SQLServer2000 成功。
    Windows CE 电源管理(转贴)
    [转]Win7系统下VS2005_2008不识别WinCE5 SDK
    [转]windows 7 下ASP.net 本地配置 ( IIS 7)
    [转]SelectObject() 装载字体 VC EVC
    Mobile Development: Disable Windows Mobile 6.5 Start and Close Button
    [转]WebForm 与 winform 路径获取
    1. chromedriver的下载和配置
    Slf4j打印异常的堆栈信息
    写个日志请求切面,前后端甩锅更方便
  • 原文地址:https://www.cnblogs.com/yangmx/p/3765870.html
Copyright © 2011-2022 走看看