@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は、コンパイラがメソッドが定義されていることを警告するのを防ぎます。ただし、@interface
.mファイル内のはカテゴリであるため、ivarを定義することはできません。
2012年8月6日更新:Objective-Cは、この回答が書かれてから進化しました。
ivars
クラス拡張で宣言することができます(そして常にそうすることができます-答えは間違っていました)
@synthesize
必須ではありません
ivars
@implementation
:の上部を中括弧で宣言できるようになりました。
あれは、
@implementation {
id _ivarInImplmentation;
}
@end
@interface Person ()
十分であろう。