„Objective-C programozási nyelv” változatai közötti eltérés
[nem ellenőrzött változat] | [nem ellenőrzött változat] |
Tartalom törölve Tartalom hozzáadva
42. sor:
=== Interfészek és implementációk ===
Az Objective-C nyelvben egy osztály interfésze és implementációja különálló kód-tömbökben kell legyen. Megegyezés szerint az interfészt egy header fáljban (általában .h kiterjesztéssel) míg az implementációt egy kód fáljban helyezzük el (általában .m kiterjesztéssel).
==== Interfészek ====
Az interfész általában a header fáljban van leírva. Szokványos hogy a fálj neve az osztály neve is egyúttal. Ha van egy Foo osztályunk, akkor ezt általában a Foo.h fáljba tesszük.
Példa egy interfész leírásra:
<source lang="objc">
@interface osztálynév : ősosztálynév {
// változók
}
+osztályMetódus1;
+(típus)osztályMetódus2;
+(típus)osztályMetódus3:(típus)paraméter_neve;
-(típus)példányMetódus1:(param1_type)paraméter1_neve :(típus)paraméter2_neve;
-(típus)példányMetódus2Paraméter1:(típus)paraméter1_neve ésParaméter2:(típus)paraméter2_neve;
@end
</source>
A '+' azt jelenti, hogy osztálymetódus, a '-' hogy példány metódusa. Az osztálymetódusok nem férhetnek hozzá a változókhoz.
Ugyanez a kód C++ nyelven:
<source lang="cpp">
class osztálynév : ősosztálynév { {
// változók
// Osztály (statikus) metódusok
static void* osztályMetódus1();
static típus osztályMetódus2();
static típus osztályMetódus3(típus paraméter_neve);
// Példány metódusok
return_type példányMetódus1(típus paraméter1_neve,típus paraméter2_neve);
return_type példányMetódus1Paraméterek(típus paraméter1_neve, típus paraméter2_neve);
};
</source>
Megfigyelhetjük, hogy a <tt>példányMetódus2Paraméter1</tt> példázza az Objective-C egyik különlegességét, hogy a paramétereket nevesíteni lehet a függvény nevében -- ennek nincs C++ megfelelője.
A visszatérési típusok lehetnek bármilyen standard C típusok, egy pointer egy Objective-C objektumra, vagy egy specifikus objektumra mutató pointer (NSArray *, NSImage *, NSString *). Az alapértelmezett típus <tt>id</tt>, ami bármilyen Objective-C objektumot jelöl.
A metódusok paraméterei kettősponttal kezdődnek, utána következik a típus majd a neve. Sok esetben érdemes megnevezni a paramétereket:
<source lang="objc">
-(void) setRange:(int)start :(int)end;
-(void) importDocumentWithName:(NSString *)name withSpecifiedPreferences:(Preferences *)prefs beforePage:(int)insertPage
</source>
==== Implementációk ====
Az interfész csak a metódusok és változók neveit deklarálja; maga a kód az implementációban létezik. Általában .m kiterjesztésű fájlokba tesszük.
<source lang="objc">
@implementation classname
+osztályMetódus {
// implementáció
}
-példányMetódus {
// implementáció
}
@end
</source>
Összehasonlítva a C++ és Objective-C közti különbségeket:
<source lang="objc">
-(int)foo:(int)bar {
return [self square_root: bar];
}
</source>
<source lang="c">
int foo(int bar) {
return square_root(bar);
}
</source>
Itt egy példa a paraméterek nevesítésére és használatára:
<source lang="objc">-(int)changeColorToRed:(float)red green:(float)green blue:(float)blue
[myColor changeColorToRed:5.0 green:2.0 blue:6.0];
</source>
==== Példányosítás ====
Az Objective-C osztályokat két lépésben példányosítjuk: elöször lefoglaljuk a memóriát az új objektum számára majd inicializáljuk. Egy objektum addig nem működőképes, amíg mindkét lépést nem végeztük el. Ezeket általában egyetlen sorban meg lehet oldani:
<source lang="objc">MyObject * o = [[MyObject alloc] init];</source>
Az <tt>alloc</tt> hívás elegendő memóriát foglal le, az <tt>init</tt> hívás felülírható, hogy a változókat inicializálhassuk:
<source lang="objc">
-(id) init {
self = [super init];
if (self) {
ivar1 = value1;
ivar2 = value2;
.
.
.
}
return self;
}
</source>
=== Protokollok ===
|