Logo

Objective-C, Xcode und Cocoa Tutorial


 

 

EIN TUTORIAL ZU OBJECTIVE-C, XCODE UND COCOA

 

Kapitel 9 - Fortsetzung

Externe Variablen
Schreibt man z.b. zu Beginn

int gMoveNumber = 0 ;

zu Beginn eines Programmes, also noch bevor deklariert oder implementiert wurde, so kann von allen Abschnitten heraus darauf verwiesen werden. In so einem Fall spricht man bei gMoveNumber als eine globale Variable. Das kleine g zu Beginn des frei wählbaren Namens ist wieder eine Übereinkunft und macht eben klar dass es sich um eine globale Variable handelt. Da Sie sich zu Begin des Programms ausserhalb aller Abschnitte befindet, handelt es sich nicht nur um eine globale Variable sondern auch um eine externe Variable. Auf eine solche Variable kann mit jeder Methode oder Funktion zugegriffen werden. Innerhalb jenes Moduls, das auf die externe Variable zugreifen will, wird die Variable normal deklariert und mit dem Schlüsselwort extern versehen:

extern int gMoveNumber;

Statische Variablen im Vergleich zu externen Variablen
Variablen die ausserhalb einer Methode definiert werden sind - wie bereits erwähnt - nicht nur globale Variablen, sondern auch externe Variablen. Was aber nun, wenn man eine globale Variable definieren will, die aber nicht eine externe Variable sein soll? Sie wollen also eine globale Variable die auf eine Datei beschränkt sein soll. So können Sie z.B. eine Variable definieren, die für alle Methoden innerhalb einer bestimmten Klasse zugänglich ist, aber für alle anderen Klassen und Methoden nicht zugänglich ist. Dies kann bewerkstelligt werden indem man eine Variable innerhalb des jeweiligen Implementation Abschnitts für die Klasse als statisch (static) definiert. Wenn man z.B.

static int gGlobalVar = 0;

ausserhalb einer Methode oder Funktion definiert, ist diese Variable zugänglich von allen folgenden Abschnitten der jeweiligen Datei, aber nicht von Methoden oder Funktionen ausserhalb der Datei.

 



Ein Beispiel könnte eine alloc Methode sein, die zählt wieviel Objekte allokiert wurden. Wenn man wieder auf das Bruch Beispiel zurückblickt, könnte man das Programm um zwei neue Methoden erweitern. Die allocF Methode allokiert eine neue Bruch Methode und zählt gleichzeitig mit, wieviel Objekte allokiert wurden und eine count Methode die diesen Wert zurückgibt. Beide Methoden sind Klassenmethoden und keine Instanz Methoden, deshalb auch auch das plus Zeichen in der Deklaration:

+ (Fraction *) allocF;
+ (int) count;

Vielleicht haben Sie bemerkt, dass die vererbte alloc Methode nicht überschrieben wurde, was ziemlich riskant ist. Anstatt dessen haben Sie eine eigene Allokiermethode definiert. Ihre Methode will einen ja einen Vorteil aus der vererbten alloc Methdoe ziehen. Hier nun das ganze File:

static int gCounter;

@implementation Bruch;
+(Bruch *) allocF
{
extern int gCounter;
++gCounter;
return [Bruch alloc];
}
+(int) count
{
extern int gCounter;
return gCounter;
}
//..hier können noch andere Methoden folgen..

@end;


weiter ---- Objective-C Index ---- Startseite----zurück


Das Inhaltsverzeichnis

EINSTIEG
KAPITEL 1: SCHRITT FÜR SCHRITT ZUM ERSTEN PROGRAMM
KAPITEL 2: OBJEKTE, KLASSEN, INSTANZEN UND METHODEN
KAPITEL 3: DIE VERSCHIEDENEN DATENTYPEN
KAPITEL 4: DIE PROGRAMMSCHLEIFEN
KAPITEL 5: ENTSCHEIDE DICH, ENTWEDER ODER....
KAPITEL 6: UND NOCHMALS KLASSEN
KAPITEL 7: VERERBUNG
KAPITEL 8: POLYMORPHISMUS, DYNASCHISCHE TYPISIERUNG UND DYNAMISCHES BINDEN
KAPITEL 9: NOCH MEHR DATENTYPEN UND VARIABLEN
KAPITEL 10: CATEGORIES, POSING AND PROTOCOL
KAPITEL 11: DER PRÄPROZESSOR

 

 

 

Links