iOS-カスタムクラスオブジェクトをプロパティとして正しく参照する方法

1432 ワード

ある同僚がコードします.1つのクラスは、属性としてサブクラスオブジェクトを参照します.
#import 
#import "CycleFindTestClas.h"

@interface TestObjectClass : NSObject
@property (nonatomic, strong) CycleFindTestClas *cycle;
@end
#import "TestObjectClass.h"

//  CycleFindTestClas 

//(Cannot find interface declaration for 'TestObjectClass', superclass of 'CycleFindTestClas')

@interface CycleFindTestClas : TestObjectClass

@end

以下は私の推測ですが、もしミスがあったらよろしくお願いします.
その原因を究明するのは、実は簡単です.コンパイラがクラスを検索するのは2つにほかならない.
  • ファイル検索#import"ClassName.h"
  • 前置き宣言@class name;

  • 上記のコードに前置き宣言がない場合、TestObjectClassクラスを検索するには必ずファイルを通過しなければならないので、次のプロセスが開始されます.
  • コンパイラはTestObjectClassを調べた.hファイル
  • そしてTestObjectClassを上から下へ巡り始める.hコード
  • Foundationを発見した.h内にないので、次の行CycleFindTestClasを検索します.h
  • CycleFindTestClasを発見した.hにはTestObjectClassがありますが、このTestObjectClassは親です.では、TestObjectClassの検索を続行します.
  • コンパイラはTestObjectClassを調べた.hファイル
  • そしてTestObjectClassを上から下へ巡り始める.hコード
  • ・・・・・・・・・・・・・・
  • を循環しているのか
    したがって、TestObjectClassの宣言@interface TestObjectClass:NSObjectはまったく見つかりません.だから私たちは日常的なコードの中で.h内で他のカスタムクラスをできるだけ引用しない.hファイルは、できるだけ前置きでクラスを宣言する.
    @class CycleFindTestClas;
    #import 
    @interface TestObjectClass : NSObject
    @property (nonatomic, strong) CycleFindTestClas *cycle;
    @end