@interface
Özel yöntemler içeren bir kategoriyi tanımlayan bir ek koymak yaygındır :
Kişi.h:
@interface Person
{
NSString *_name;
}
@property(readwrite, copy) NSString *name;
-(NSString*)makeSmallTalkWith:(Person*)person;
@end
Kişi. 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
'Özel kategori' (isimsiz bir kategori için uygun isim 'özel kategori' değildir, 'sınıf uzantısı'dır). M derleyicinin yöntemlerin tanımlandığına dair uyarı vermesini engeller. Ancak, @interface
.m dosyasındaki bir kategori olduğundan, içinde ivars tanımlayamazsınız.
6 Ağustos 2012 Güncellemesi: Objective-C, bu cevabın yazıldığından bu yana gelişti:
ivars
bir sınıf uzantısında bildirilebilir (ve her zaman olabilir - cevap yanlıştı)
@synthesize
gerekli değil
ivars
artık şunun üstündeki parantez içinde belirtilebilir @implementation
:
yani,
@implementation {
id _ivarInImplmentation;
}
@end
@interface Person ()
yeterli olacaktır.