OC中类的标准方式
代码语言:javascript复制#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic,copy) NSString *firstName;
@property (nonatomic,copy) NSString *lastName;
@end
#import "Person.h"
@implementation Person
@end
利用@Class在类的头文件中可以减少编译时间
当我们在实际工作中,可能需要创建一个名为Student的新类,然后在Person的类中应该有一个Student的属性,一般做法是引入在Person.h文件中引入Student.h
代码语言:javascript复制#import <Foundation/Foundation.h>
#import "Student.h"
@interface Person : NSObject
@property (nonatomic,copy) NSString *firstName;
@property (nonatomic,copy) NSString *lastName;
@property (nonatomic,strong) Student *stu;
@end
#import "Person.h"
@implementation Person
@end
- 但是这样做不太好,因为我们不需要知道Student类的全部实现细节,只需要知道有一个类名叫Student就好,所以应该使用@class引入,这种方式叫“向前声明”该类
#import <Foundation/Foundation.h>
@class Student;
@interface Person : NSObject
@property (nonatomic,copy) NSString *firstName;
@property (nonatomic,copy) NSString *lastName;
@property (nonatomic,strong) Student *stu;
@end
#import "Person.h"
#import "Student.h"
@implementation Person
@end
- 将引用头文件的时机尽量延后,这样可以减少类的使用者所需引入的头文件数量。假设要是把Student.h引入到Person.h中,那么就会引入Student.h的所有文件,有很多根本用不到的内容,反而增加了编译的时间
有时候必须在头文件中引入其他头文件
如果你写的类, 集成某个类, 则必须引入定义那个父类的头文件,或者是你声明的类遵从某个协议, 那么该协议必须有完整定义, 而且不能用向前声明, 向前声明只能告诉编译器有某个协议, 而此时编译器却需要知道该协议中定义的方法
参考
Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法