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 @interfacein 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
ivarskann jetzt in geschweiften Klammern oben angegeben werden @implementation:
das ist,
@implementation {
id _ivarInImplmentation;
}
//methods
@end
@interface Person ()wird genügen.