通常使用します
@interface interface_name : parent_class <delegates>
{
......
}
@end
.hファイルと.mファイルのメソッドは、.hファイルで宣言された変数のプロパティを合成します。
ただし、一部のコードでは、この@interface ..... @ endメソッドは.mファイルにも保持されます。どういう意味ですか?それらの違いは何ですか?
また、.mファイルで定義されているインターフェイスファイルのゲッターとセッターに関するいくつかの単語を与えます...
前もって感謝します
プライベートメソッドを含むカテゴリを定義する@interface
を追加することは一般的です:
Person.h:
@interface Person
{
NSString *_name;
}
@property(readwrite, copy) NSString *name;
-(NSString*)makeSmallTalkWith:(Person*)person;
@end
Person.m:
@interface Person () //Not specifying a name for the category makes compiler checks that these methods are implemented.
-(void)startThinkOfWhatToHaveForDinner;
@end
@implementation Person
@synthesize name = _name;
-(NSString*)makeSmallTalkWith:(Person*)person
{
[self startThinkOfWhatToHaveForDinner];
return @"How's your day?";
}
-(void)startThinkOfWhatToHaveForDinner
{
}
@end
「プライベートカテゴリ」(名前のないカテゴリの適切な名前は「プライベートカテゴリ」ではなく、「クラス拡張子」).mは、メソッドが定義されていることをコンパイラが警告しないようにします。ただし、.mファイルの@interface
はカテゴリであるため、ivarを定義できません。
12年8月6日更新:この答えが書かれて以来、Objective-Cは進化しています。
ivars
はクラス拡張で宣言できます(常にそうでした-答えは間違っていました)@synthesize
は不要ですivars
を@implementation
の先頭に中括弧で宣言できるようになりました。あれは、
@implementation {
id _ivarInImplmentation;
}
//methods
@end
.hをクラスのパブリックインターフェイスに制限し、このクラス拡張にプライベートな実装の詳細を配置すると、プロジェクトをよりクリーンにすることができるという概念です。
aBC.hファイルで変数のメソッドまたはプロパティを宣言すると、これらの変数のプロパティとメソッドにクラスの外部からアクセスできることを意味します
@interface Jain:NSObject { NSString *_name; } @property(readwrite, copy) NSString *name; -(NSString*)makeSmallTalkWith:(Person*)jain; @end
@Interfaceを使用すると、プライベートivar、プロパティ、およびメソッドを宣言できます。したがって、ここで宣言したものには、このクラスの外部からアクセスできません。一般に、すべてのivar、プロパティ、およびメソッドをデフォルトでprivateとして宣言する必要があります
ABC.mファイルで変数のメソッドまたはプロパティを宣言すると、これらの変数のプロパティとメソッドがクラスの外部にアクセスできないことを意味します
@interface Jain() { NSString *_name; } @property(readwrite, copy) NSString *name; -(NSString*)makeSmallTalkWith:(Person*)jain; @end
.mファイルで他のクラスを作成することもできます。たとえば、.hファイルで宣言されたクラスから継承するが、若干異なる動作をする他の小さなクラスです。これをファクトリーパターンで使用できます