यह एक अतिरिक्त है @interfaceकि निजी तरीकों से एक श्रेणी को परिभाषित करता है डाल करने के लिए आम है :
व्यक्ति:
@interface Person
{
NSString *_name;
}
@property(readwrite, copy) NSString *name;
-(NSString*)makeSmallTalkWith:(Person*)person;
@end
व्यक्ति:
@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
'निजी श्रेणी' (किसी अनाम श्रेणी के लिए उचित नाम 'निजी श्रेणी' नहीं है, यह 'श्रेणी विस्तार' है)। कंपाइलर को चेतावनी देने से रोकता है कि विधियाँ परिभाषित हैं। हालाँकि, क्योंकि @interface.m फ़ाइल एक ऐसी श्रेणी है जिसमें आप इसमें ivars परिभाषित नहीं कर सकते हैं।
अद्यतन 6 अगस्त '12: इस उत्तर के लिखे जाने के बाद से उद्देश्य-सी विकसित हुआ है:
ivars एक वर्ग विस्तार में घोषित किया जा सकता है (और हमेशा हो सकता है - उत्तर गलत था)
@synthesize आवश्यक नहीं
ivarsअब शीर्ष पर ब्रेसिज़ में घोषित किया जा सकता है @implementation:
अर्थात्,
@implementation {
id _ivarInImplmentation;
}
@end
@interface Person ()पर्याप्त होगा।