次のような別のインターフェイス宣言が表示されることがあります。
@interface MyCode ()
@end
これは.hファイルのものと重複していませんか?
次のような別のインターフェイス宣言が表示されることがあります。
@interface MyCode ()
@end
これは.hファイルのものと重複していませんか?
これはXcodeによって提供されるカテゴリであり、この実装ファイル内からのみ使用できるプライベートプロパティとメソッドを宣言するために使用されます。
クラスのすべてのメソッドを常に外部に公開する必要はありません。代わりに、このプライベートカテゴリでそれらを宣言します(これらのプライベートメソッドの前にアンダースコア(_
)を付けて、呼び出していることを明確にします。プライベートメソッドですが、それは完全にオプションです)。
例として、これは私が公開したくないプライベートな初期化メソッドです。
@interface MyClass ()
- (BOOL)_init;
@end
@implementation MyClass
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self != nil)
{
if (![self _init])
self = nil;
}
return self;
}
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:code];
if (self != nil)
{
if (![self _init])
self = nil;
}
return self;
}
- (BOOL)_init
{
self.something = whatnot;
self.thingA = self.thingB;
return YES;
}
プライベートivars/property/methodsを宣言するときに使用されます。
.hファイルにはパブリックメソッドとプロパティがあり、.mファイルにはプライベートがあります。
概念は、.hをクラスのパブリックインターフェイスに制限し、プライベート実装の詳細をこのクラス拡張に配置すると、プロジェクトをよりクリーンにすることができるということです。「 Objective-Cを使用したプログラミング」ガイドのプライベートクラス拡張の説明を参照してください。
この@Interfaceを使用すると、プライベートivar、プロパティ、およびメソッドを宣言できます。したがって、ここで宣言したものには、このクラスの外部からアクセスすることはできません。一般に、クラスのインスタンスがそれらにアクセスする必要がない限り、すべてのivar、プロパティ、およびメソッドをデフォルトでプライベートとして宣言する必要があります(この@interface()で)。
お役に立てれば
これはクラス拡張です。続きを読む
通常、プライベートivars/properties/methodsの宣言に使用されます。