- Registriert
- 31.12.03
- Beiträge
- 273
ist das schon laenger bekannt?
http://community.games4mac.de/index.php?automodule=blog&req=attach&id=71
http://community.games4mac.de/index.php?automodule=blog&req=attach&id=71
commander schrieb:Klar, die Speicherverwaltung der VM ist etwas undurchsichtig, aber die Möglichkeit, mit Soft-/Weak-/Phantomreferenzen zu arbeiten sind doch fantastisch!
blutaermer schrieb:ich weiss auch nicht wo der vorteil bzw. der nachteil gegenueber den bereits vorhandenen mechanismen von Obj-C ist.
NSObject einObject = [NSObject alloc]; //Speicher für das Objekt wir reserviert
[einObject init]; //Objekt wird initialisiert
/*
kann auch mit
NSObject einObject = [[NSObject alloc] init];
abgekürzt werden.
*/
[einObject tuWasIchDirSage]; //die Methode "tuWasIchDirSage" des Objects wird ausgeführt
[einObject release]; //hier brauchen wir das Object nicht mehr und geben den Speicher wieder frei.
Object einObject = new Object(); //Speicher wird reserviert und Object initialisiert
einObject.tuWasIchDirSage(); //die Methode "tuWasIchDirSage" des Objects wird ausgeführt
/*
In Java wars das jetzt schon. Kriegt die GC mit, dass das Objekt nicht mehr benötigt wird, fliegt es normalerweise aus dem Speicher.
Der Programmierer kann der ganzen Sache noch etwas "Nachdruck" verleihen, aber obs Erfolg hat ist halt nicht sicher gestellt. Also folgendes kann noch getan werden.
*/
einObject = null; // immer gut...
System.gc(); // sollte nicht unbedingt getan werden, weil es drückt die Performance gewaltig.
blutaermer schrieb:ok. das man objekte neu anlegen muss und wieder freigeben sollte ist klar (hat man dafuer nicht die konstruktoren und destruktoren bei c++)
die gc macht das ganze also mehr oder weniger automatisch.
aber was ist denn nun mit dem autoreleasepool unter objC? ist das dann sone semiautomatische sache, die einen so ein bisschen unter die arme greift und durchstrukturiert ?
- (NSString *)gibtMirEinenStringZurueck //es wird gebeten von zweideutigkeiten abstand zu nehmen *ggg*
{
int ergebnisEinerBerechnung = 25; //das würde natürlich berechnet werden..
NSString * rueckgabeString = [[NSString alloc] initWithFormat:@"Der Ergebnis lautet: %d ",ergebnisEinerBerechnung]
return rueckgabeString;
}
Außer in zyklischen Strukturen bietet GC gegenüber SmartPointer wie man sie etwa in C++ verwendet keinen qualitativen Vorteil. Dafür programmiert man sich bei Java einen Wolf, weil man massenweise Sonderbehandlungen berücksichtigen muß, weil es kein RAII gibt.commander schrieb:Ab einer gewissen Projektgröße ist gc ein Segen!
Ja, in C++ verwendet man dafür Konstruktoren und Destruktoren. Das hat den riesen Vorteil, daß man nicht nur Speicher so verwalten kann sondern auch andere Resourcen. Wirklich "witzig" wird es, wenn man andere Resourcen verwalten muß.blutaermer schrieb:ok. das man objekte neu anlegen muss und wieder freigeben sollte ist klar (hat man dafuer nicht die konstruktoren und destruktoren bei c++)
die gc macht das ganze also mehr oder weniger automatisch.
LoCal schrieb:Oder ein Graus.
Es war hier zum Bespiel so, dass der Hersteller unseres ApplicationServers uns ein Modul zur direkten Anbindung an ein SAP programmiert hat.
Wir kämpften über Monate mit Phantomverbindungen, weil Objekte "irgendwie" doch nicht richtig verworfen wurden, trotz nullen. Und wenn halt nur eine bestimmte Anzahl an Verbindungen bestehen darf und die geschlossenen werden nicht verworfen, dann ist das nicht so toll
commander schrieb:Das klingt aber eher nach einem OS - Problem - ich habe das auf einem Win 2000 Rechner beobachtet - da wurden teilweise die nativen Sockets nicht mehr (schnell genug) freigegeben... unter Linux konnte ich das noch nie beobachten.
Jede Klasse, die von NSObject abgeleitet ist, ist das ja automatisch.LoCal schrieb:Nein, die jeweilige Klasse muss autorelease-fähig sein.
Das hört sich eher danach an, daß da jemand nicht sauber Resourcen freigibt, weil er der Meinung ist in Java könne man RAII wie in C++ verwenden. Das geht aber nicht.commander schrieb:Das klingt aber eher nach einem OS - Problem
tjp schrieb:Das hört sich eher danach an, daß da jemand nicht sauber Resourcen freigibt, weil er der Meinung ist in Java könne man RAII wie in C++ verwenden. Das geht aber nicht.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Für die Ihnen angezeigten Verarbeitungszwecke können Cookies, Geräte-Kennungen oder andere Informationen auf Ihrem Gerät gespeichert oder abgerufen werden.
Anzeigen und Inhalte können basierend auf einem Profil personalisiert werden. Es können mehr Daten hinzugefügt werden, um Anzeigen und Inhalte besser zu personalisieren. Die Performance von Anzeigen und Inhalten kann gemessen werden. Erkenntnisse über Zielgruppen, die die Anzeigen und Inhalte betrachtet haben, können abgeleitet werden. Daten können verwendet werden, um Benutzerfreundlichkeit, Systeme und Software aufzubauen oder zu verbessern.
Durch das Klicken des Buttons "Zustimmen" willigen Sie gem. Art. 49 Abs. 1 DSGVO ein, dass auch Anbieter in den USA Ihre Daten verarbeiten. In diesem Fall ist es möglich, dass die übermittelten Daten durch lokale Behörden verarbeitet werden.