Загальноприйнятим є додавання додаткової, @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 є категорією, ви не можете визначити в ньому ivars.
Оновлення 6 серпня '12: Objective-C розвинувся з часу написання цієї відповіді:
ivars
може бути оголошено в розширенні класу (і завжди могло бути - відповідь була неправильною)
@synthesize
не потрібно
ivars
тепер може бути оголошено в фігурних дужках у верхній частині @implementation
:
це,
@implementation {
id _ivarInImplmentation;
}
@end
@interface Person ()
вистачить.