@class主要是避免#import导致死循环的问题
由于@class仅仅是告诉编译器后面的名称是一个类,所以编译器并不知道这个类中有哪些属性和方法,所以在.m中使用这个类时需要import这个类,才能使用
@class仅仅是告诉编译器,@class后面的名称是一个类,不会做任何的拷贝
具体使用:
- 在.h文件中使用@class引用一个类
- 在.m文件中使用#import包含这个类的.h文件
有一个Person人类,人类中有一个属性是Dog 养的狗
有一个Dog狗类,狗类中有一个属性是Person 主人
如果上述的情况使用在.h文件中使用#import则会导致死循环,所以在.h文件中使用@class进行解决
- Person.h
#import <Foundation/Foundation.h>
@class Dog;
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
@property Dog *dog;
@end
NS_ASSUME_NONNULL_END
- Person.m
#import "Person.h"
#import "Dog.h"
@implementation Person
@end
- Dog.h
#import <Foundation/Foundation.h>
@class Person;
NS_ASSUME_NONNULL_BEGIN
@interface Dog : NSObject
@property Person *p;
@end
NS_ASSUME_NONNULL_END
- Dog.m
#import "Dog.h"
@implementation Dog
@end