原文地址http://blog.youkuaiyun.com/yangbingbinga/article/details/38536717
在OC中,导入(import)头文件之后,会产生很多的依赖关系,产生依赖关系的原因是,OC需要某些信息才能正常工作,比如:在一个类的.h中或者.m需要用到某些实例变量或者方法;
但有时候我们在.h文件中只需要使用类名即可,不需要知道那个类的具体的方法,和实例变量,这样在OC中的解决方案是使用@class只是说明一下,这是个类而已,只需要使用指针来引用他.而不需要导入该文件,这样也不会导致编译错误!
好处:
- 1.在.h类的声明文件中,如果只是用了类的指针而没有使用类的方法和实例变量,可以使用@class代替#import,可以避免没必要的引用.
-
- 2.使用#import来引入该类的话,首先需要编译该类,而使用@class不需要,他只是说明这是个类而已,不需要提前编译,提高了编译效率!
-
- 3.但是如果使用了外部类的方法,则只能使用#import不能使用@class否则,编译器会找不到该方法
-
- 4.对于循环依赖关系,只能使用@class:如A.h导入了B.h,B.h导入A.h这样一个头文件的编译需要等到对方编译才行,导致了编译错误,这时候只能使用@class!
-
- 5.如果在定义一个类时,需要提前使用类来声明一个对象,那么就必须使用@class进行声明,以免导致编译错误;
- 如果是 协议 同理,使用@protocol提前声明
- 1.在.h类的声明文件中,如果只是用了类的指针而没有使用类的方法和实例变量,可以使用@class代替#import,可以避免没必要的引用.
-
- 2.使用#import来引入该类的话,首先需要编译该类,而使用@class不需要,他只是说明这是个类而已,不需要提前编译,提高了编译效率!
-
- 3.但是如果使用了外部类的方法,则只能使用#import不能使用@class否则,编译器会找不到该方法
-
- 4.对于循环依赖关系,只能使用@class:如A.h导入了B.h,B.h导入A.h这样一个头文件的编译需要等到对方编译才行,导致了编译错误,这时候只能使用@class!
-
- 5.如果在定义一个类时,需要提前使用类来声明一个对象,那么就必须使用@class进行声明,以免导致编译错误;
- 如果是 协议 同理,使用@protocol提前声明