子类化时转发声明vs #import

Río*_*ire 7 import objective-c include forward-declaration

我有MyClassA一个类型的属性MyClassB

//
//  MyClassA.h
//  

@interface MyClassA : NSObject

@property (strong, nonatomic, readonly) MyClassB *myClassB;

@end
Run Code Online (Sandbox Code Playgroud)

MyClassB有房产myString.

//
//  MyClassB.h
//  

@interface MyClassB : NSObject

@property (copy, nonatomic, readonly) NSString *myString;

@end
Run Code Online (Sandbox Code Playgroud)

我有MyClassC需要访问myString它的实现.

我是不是该 -

一)正向声明MyClassBMyClassA.h,并#import "MyClassB.h"MyClassC.m

要么

b)#import MyClassB.hinMyClassA.h

Tyl*_*ler 2

一般来说,您应该@class在头文件中尽可能转发声明。您可能不想这样做的唯一一次是当您从超类继承或声明协议一致性时,因为编译器需要知道该类或协议中发生了什么。

#import MyClassB.h对于本例,我将在头文件和MyClassC.m 文件中对所有属性声明使用 @class 。这将允许 MyClassC 了解 MyClassB 上的所有属性。