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;,否则是会出错的。

  • 相关阅读:
    MSSQL中with(nolock)的用法
    google reader 使用快捷键
    HTML中em标签的用法
    js正则表达式
    C#中lock关键字的用法
    面试反思
    关于IE6.7.8.FF兼容的问题
    C#中DateTime.Now.Ticks的用法和说明
    JS中eval的用法
    这两天面试时不会的笔试题
  • 原文地址:https://www.cnblogs.com/chenyg32/p/4485252.html
Copyright © 2011-2022 走看看