2011-07-10 31 views
0

Appleのドキュメントから次のコードスニペットを見つけました。初心者のObjective-C構文質問

インターフェイスは非常に簡単です:

#import <Foundation/Foundation.h> 
#import "ApplicationCell.h" 

@interface CompositeSubviewBasedApplicationCell : ApplicationCell { 
     UIView *cellContentView; 
} 
@end 

実装:

#import "CompositeSubviewBasedApplicationCell.h" 

@interface CompositeSubviewBasedApplicationCellContentView : UIView { 
    ApplicationCell *_cell; 
    BOOL _highlighted; 
} 

@end 

@implementation CompositeSubviewBasedApplicationCellContentView 
//not important, abbreviated... 
@end 

実装ファイル内の別の@interface宣言があり、なぜ私は非常に把握することはできません。私はそれがプライベートインスタンス変数を宣言する方法であると仮定します。私は正しい?

インターフェイスは既にCompositeSubviewBasedApplicationCellApplicationCellに拡張されているため、CompositeSubviewBasedApplicationCellContentView : UIViewは何を意味していますか?

ありがとうございます。

答えて

4

これは別のクラスの定義です。ほとんどの場合、これは別のファイルになりますが、複数のクラスを1つのファイルに定義することは可能です(特に、それらが密接に関連している場合)。

CompositeSubviewBasedApplicationCellContentViewは、おそらくCompositeSubviewBasedApplicationCell以外のクラスでは使用されないため、独自のヘッダーファイルを持つ必要はありません。

+0

Oh my。私は疲れていなければならない。私はそれが別の定義であることは分かりませんでした。完全に名前の最後に「ContentView」を見逃してしまった。指摘してくれてありがとう。 – Azu

1

CompositeSubviewBasedApplicationCellおよびCompositeSubviewBasedApplicationCellContentViewは、2つの異なるクラスである。

なぜ実装ファイルに別の@interface宣言があるのか​​よく分かりません。私はそれがプライベートインスタンス変数を宣言する方法であると仮定します。私は正しい?

はい、それはクラスを完全に非公開にする方法です。誰かが部分的に非公開にしたい場合は、次のような実装ファイルでそれを拡張することができます:

@interface CompositeSubviewBasedApplicationCell() 

@end