一、循环引用
//
// Person.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/26.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject
@property (nonatomic,retain) Dog *dog;
@end
//
// Person.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/26.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Person.h"
@implementation Person
@end
//
// Dog.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/26.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
@interface Dog : NSObject
@property (nonatomic,retain) Person *master;
@end
//
// Dog.m
// OCStudy
//
// Created by LiuMingchuan on 15/9/26.
// Copyright © 2015年 LMC. All rights reserved.
//
#import "Dog.h"
@implementation Dog
@end
上面的两个类中,Person和Dog互相引用,在编译时会造成循环引用,使得编译不能通过。
但是我们经常会有这样的使用要求,两个类中互相引用
就像上面写的【主人有一只狗】、【狗有主人】
这时我们就可以在【.h】文件中不用import的形式将类的内容全部导入,我们使用@class
@class的作用是单纯的告诉编译器,后面的名字指示的是一个类,但是并不将类的内容导入
如下
//
// Person.h
// OCStudy
//
// Created by LiuMingchuan on 15/9/26.
// Copyright © 2015年 LMC. All rights reserved.
//
#import <Foundation/Foundation.h>
//#import "Dog.h"
@class Dog;
@interface Person : NSObject
@property (nonatomic,retain) Dog *dog;
@end