XCode: Klasse über kompletten Programmabruf verfügbar

G

GeorgeDorn

Registriert
Thread Starter
Dabei seit
17.06.2006
Beiträge
4
Reaktionspunkte
0
Hallo!

Ich probiere grade etwas mit XCode rum und nun interessiert mich, wo im Programm ich eine Klasse instanzieren muss, um sie über den kompletten Programmablauf verfügbar zu haben.

Also, es fällt mir noch etwas schwer das zu erklären, deswegen versuche ichs nochmal ausführlich. Ich habe eine Benutzeroberfläche mit dem InterfaceBuilder gemacht, deren Outlets eine Klasse im Programm aufrufen. Nun möchte ich einige Daten, die hier anfallen auch weiterhin im Programm verfügbar haben. Dafür habe ich eine weitere Klasse gemacht, in die diese Daten per Methode geladen werden. Wo muss ich diese jetzt instanzieren damit sie "immer da bleibt"?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und danke für eure Hilfe,

Philipp
 
wie wäre es in main bzw deinen haupteventloop? ;)

(kann aber auch sein, dass du eventuell das objekt als referenz übergeben musst, um es in anderen objekten zu nutzen...)
 
Zuletzt bearbeitet:
Schau dir mal das MVC-Konzept an (model-view-controller). Z.B. ist in der Cocoa-Dokumentation ein Artikel "Cocoa Application Tutorial Using Objective-C", in dem das erläutert wird.

Tobi
 
Refenz?

Wie mach ich das denn?

"eventuell das objekt als referenz übergeben?"

Danke schonmal für eure Hilfe!

Phil
 
GeorgeDorn schrieb:
Wie mach ich das denn?

"eventuell das objekt als referenz übergeben?"

Danke schonmal für eure Hilfe!

Phil
Du musst einer Methode, die ein (id) erwartet, Dein instantiiertes Objekt übergeben
 
Ich verstehe dich richtig, dass die von der Klasse verwalteten Daten nicht dokumentbasiert sind und während des Programmablaufs nur eine einzige Instanz der Klasse existieren soll? Dann ist wahrscheinlich das Singleton-Pattern die beste Lösung. Das wird von Cocoa auch an diversen Stellen verwendet, z.B. beim NSNotificationCenter. Dazu fügst du deiner Klasse eine Klassenfunktion hinzu, die beim ersten Aufruf die Instanz erstellt und zurückgibt und bei allen weiteren Aufrufen nur noch die bereits erstellte Instanz zurückliefert. Das sieht dann in etwa so aus:

Code:
@interface MyClass : NSObject
{
  ..
}

+ (MyClass*)sharedInstance;

...

@end



@implementation MyClass

static MyClass *sharedMyClass;

+ (MyClass*)sharedInstance
{
  if (sharedMyClass == NULL) {
    sharedMyClass = [[MyClass alloc] init];
  }
  return sharedMyClass;
}

...

@end

Dann kannst du von überall aus deinem Programm auf die Singleton-Instanz mit [MyClass sharedInstance] zugreifen, wobei du sicher sein kannst, dass das Objekt existiert und ohne dass du die Objektreferenz überall hin übergeben musst.

Gremlin

PS: Quellcode-Beispiel ist einfach in Beitragseditor reingehackt, keine Garantie auf korrekte Syntax.
 
Zurück
Oben Unten