Es ist üblich, eine zusätzliche zu setzen @interface
Kategorie einzufügen, die eine Kategorie definiert, die private Methoden enthält:
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
Die 'private Kategorie' (der richtige Name für eine namenlose Kategorie ist nicht 'private Kategorie', sondern 'Klassenerweiterung') .m verhindert, dass der Compiler warnt, dass die Methoden definiert sind. Da es sich bei der @interface
in der .m-Datei um eine Kategorie handelt, können Sie darin keine ivars definieren.
Update 6. August '12: Objective-C hat sich weiterentwickelt, seit diese Antwort geschrieben wurde:
ivars
kann in einer Klassenerweiterung deklariert werden (und könnte es immer sein - die Antwort war falsch)
@synthesize
ist nicht nötig
ivars
kann jetzt in geschweiften Klammern oben angegeben werden @implementation
:
das ist,
@implementation {
id _ivarInImplmentation;
}
//methods
@end
@interface Person ()
wird genügen.