zoukankan      html  css  js  c++  java
  • iOS #import和@class 区别

    @class和#import相似。

    1.@class用于 forward-class declaration,只能使用@class,

    @class class2
     
    @interface class1
    {
        class2* class2Object;
    }
     
    @end
     
    @interface class2
    {
        class1* class1Object;
    }
    @end

    2.

    class1.h中引入class2.h头文件

    #import "class2.h"
    @interface class1
    {
        class2* class2Object;
    }
     
    @end

    class2.h中引入class1.h头文件

    #import "class1.h"
    @interface class2
    {
        class1* class1Object;
    }
    @end

    这种情况会导致引用死锁,所以应该用forward-class declaration,即@class,如下

    class1.h

    @class class2;
    @interface class1
    {
        class2* class2Object;
    }
     
    @end

    class2.h

    @class class1;
    @interface class2
    {
        class1* class1Object;
    }
    @end

    总结,@class class1只是告诉编译器,class1是一个类,你不要以为class1是个未声明的野种,除此之外,没了。

    但是 #import "class1.h"会告诉编译器,class1这个类中有什么东西,即class1.h中包含的函数和变量。

    所以.h中使用@class绰绰有余,若你有需要创建或访问class1中的函数和变量,则必须使用#import。

    最后给个常见的例子

    @class A;
    
    @protocol MyDelegate <NSObject>
    - (BOOL)f:(A *)a;
    - (void)g:(A *)a;
    @end
    
    @interface A : NSObject
    @end

    协议写在@interface前面,协议使用了类A,又不涉及A中的函数和变量,此时应当在协议前面写上@class A;,否则是会出错的。

  • 相关阅读:
    Windows下临界区的使用CRITICAL_SECTION
    MFC中消息映射的实现
    Oracle中提供的事件触发机制
    CreateEvent()详解
    内核参数优化之2-1 tcp/ip 标志位报文解析
    内核参数优化之1 keepalive解析
    python之7-3对象的信息/方法获取
    python之7-2类的继承与多态
    python之7-1类
    python之6-3嵌套函数
  • 原文地址:https://www.cnblogs.com/chenyg32/p/4485252.html
Copyright © 2011-2022 走看看