Objective-C podržava proširivanje klasa pomoću kategorija. Kategorije klase definiraju se slično kao što se definira i sama klasa. U primjeru je definirana klasa MojaKlasa. U “header” datoteci klase deklarirane su varijable mojString i mojInt, te metode postaviMojString i postaviMojInt.
MojaKlasa.h:
@interface MojaKlasa : NadKlasa
{
NSString *mojString;
int mojInt;
}
- (void) postaviMojString: (NSString*) str;
- (void) postaviMojInt: (int) i;
@end
Metode su definirane u implementaciji klase (datoteka MojaKlasa.m), a ne rade ništa drugo nego postavljaju vrijednosti varijabla klase – mojString i mojInt.
MojaKlasa.m:
#import “MojaKlasa.h”
@implementation MojaKlasa
- (void) postaviMojString: (NSString*) str
{
mojString = str;
}
- (void) postaviMojInt: (int) i
{
mojInt = i;
}
@end
Slijedi definiranje kategorije klase MojaKlasa. Kategorije klase definiraju se slično kao i sama klasa. Potrebno je uvesti “header” datoteku klase koja se proširuje ovom kategorijom. Zatim, kao kod definiranja same klase, slijedi ključna riječ @interface s imenom klase, a u zagradi slijedi naziv kategorije.
KategorijaMojeKlase.h:
#import “MojaKlasa.h”
@interface MojaKlasa (KategorijaMojeKlase)
- (NSString*) MetodaUnutarKategorije;
@end
“Source” datoteka kategorije definira se kao i “source” datoteka klase. Potrebno je uvesti “header” datoteku kategorije, zatim slijedi ključna riječ @implementation, ime klase te u zagradi ime kategorije. Dalje se definiraju metode isto kao što se definiraju metode u samoj klasi.
KategorijaMojeKlase.m:
#import “KategorijaMojeKlase.h”
@implementation MojaKlasa (KategorijaMojeKlase)
- (NSString*) MetodaUnutarKategorije
{
return @”Metoda unutar kategorije je izvršena!!”;
}
@end
Kako bi se instanca klase MojaKlasa mogla napraviti i koristiti unutar neke druge klase potrebno je unutar te druge klase uvesti “header” datoteke klase MojaKlasa i kategorije KategorijaMojeKlase.
#import “MojaKlasa.h”
#import “KategorijaMojeKlase.h”
Neka instanca klase MojaKlasa ima naziv instancaMojeKlase. Deklarirane metode možemo pozvati na sljedeći način:
[instancaMojeKlase postaviMojString:@"Neki string."];
// vrijednost varijable mojString = “Neki string”
[instancaMojeKlase postaviMojInt:123];
// vrijednost varijable mojInt = 123
NSString *nekiString = [instancaMojeKlase MetodaUnutarKategorije];
// vrijednost varijable nekiString postavlja se pozivanjem metode MetodaUnutarKategorije koja vraća definirani string pa je vrijednost varijable nekiString = “Metoda unutar kategorije je izvršena!!”


Mislim da ste zaboravili spomenut @property i dot sintaksu
@ivana uskoro™ izlazi novi Flash koji ce izmedu ostalog imat opciju izrada iPhone appova (i u Mac i u Windows verziji.)
A tu su i razna polu-rjesenja kao npr. http://monotouch.net koji ti omogucava razvoja iPhone appova u C#.
Al ne moze se to nista usporedit s pravim Xcodeom i iPhone SDKom na pravom Mac OS Xu
Eh, ovaj zadnji komentar sam htio na drugi post stavit, samo sam ga u krivom tabu napisao, sorry
@fichek
All in good time, kako bi se preko Bare reklo!!
U planu je cijeli niz tekstova koji će obuhvatiti, među ostalim, i property-je!!
Pozdrav!!