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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。