OC学习那些事:@class关键字

1.引用一个类的两种办法 

@class:如果你只是定义成员变量、属性 

#import:如果是继承某个类 

2.两种方法的区别 

#import方式会包含被引用类的所有信息,包括被引用类的变量和方法 

#import<Foundation/Foundation.h> 
 
//#import "Book.h"类似 
@interface Book : NSObject 
@end 
 
@interface Student : NSObject 
{ 
    Book *_book; 
} 
@property Book*book; 
@end 

@class方式只是告诉编译器在A.h文件中,B *b只是类的声明,具体这个类有什么信息,这里不需要知道。等实现文件中真正需要的时候,才会真正查看B类中的信息 

3.正确使用方法 

Student.h文件 

//import<Foundation/Foundation.h>是为了知道Foundation框架有什么成员,和方法,避免重复定义等。 
#import<Foundation/Foundation.h> 
//声明的时候告诉是个类 
@class Book; 
@interface Student : NSObject 
{ 
    Book *_book; 
} 
@property Book*book; 
@end 

Student.m文件 

//使用的时候,在告诉有什么成员和方法 

#import "Book.h" 
@implement Student 
{ 
    … … 
} 
@end

4.@class方式 

使用@class方式由于只需要知道被引用类(B类)的名称就可以了,而在实现类由于要用到被引用类中的实体变量和方法,所以在.m文件中需要使用#import来包含引用类的头文件。 

如果又上百个头文件都#import同一个文件,或者这些文件依次被#import,那么一旦最开始得头文件改动,后面引用到这个文件的所有类都需要重新编译一遍,这样的效率也可想而知的,而相对来讲,使用@class方式就不会出现这种问题。 

当出现循环依赖干系的时候,#import会报错 

A.h文件 

#import "B.h" 
@interface A : NSObject 
{ 
    B *b; 
} 
@end 

B.h文件 

#import"A.h" 
@interface B : NSObject 
{ 
    A *a; 
} 
@end 

你可能感兴趣的:(Objective-C,Class,oc,#import)