Kümmelkorn
Aktives Mitglied
Thread Starter
- Dabei seit
- 06.10.2008
- Beiträge
- 1.941
- Reaktionspunkte
- 127
Hallo,
ich gehe gerade das Buch "Objective C und Cocoa, Band 1: Grundlagen" von Amin Negem-Awad durch (das Buch dürfte ja recht bekannt sein).
Ich stoße da gerade bei der Speicherverwaltung auf Unstimmigkeiten, die ich nicht verstehe. An für sich habe ich die Verwaltung halbwegs verstanden, aber Amins Erklärungen zu autorelease bringen mich zum Grübeln. Amin bringt in seinem Buch folgendes Beispiel einer Methode der Klasse "Person", um den Nutzen eines autorelease zu verdeutlichen:
Macht Amin dort nicht einen Denkfehler? fullname ist hier doch - so wie ich es verstehe - eine lokale Variable, die nach "return fullname;" sowieso nicht mehr existiert, da die Funktion und damit der Gültigkeitsbereich der Variable zu Ende ist!?
Gruß, Micha
ich gehe gerade das Buch "Objective C und Cocoa, Band 1: Grundlagen" von Amin Negem-Awad durch (das Buch dürfte ja recht bekannt sein).
Ich stoße da gerade bei der Speicherverwaltung auf Unstimmigkeiten, die ich nicht verstehe. An für sich habe ich die Verwaltung halbwegs verstanden, aber Amins Erklärungen zu autorelease bringen mich zum Grübeln. Amin bringt in seinem Buch folgendes Beispiel einer Methode der Klasse "Person", um den Nutzen eines autorelease zu verdeutlichen:
Code:
// Codeauschnitt auf Seite 255
-(NSString*)fullname
{
NSMutableString* fullname;
fullname = [[NSMutableString alloc] init];
[fullname appendString:self.lastname];
[fullname appendString:@", "];
[fullname appendString:self.firstname];
return fullname;
}
Amin im Buch schrieb:Das NSMutableString-Objekt wird mit einem +alloc erzeugt. Demnach muss es ein -release geben, welches dies auch wieder frei gibt. Sonst haben wir ein Speicherloch. Wo sollte es aber stehen? In der Methode selbst kann es nicht stehen, da sie dann ja ein gelöschtes Objekt zurückgäbe. (...)
Macht Amin dort nicht einen Denkfehler? fullname ist hier doch - so wie ich es verstehe - eine lokale Variable, die nach "return fullname;" sowieso nicht mehr existiert, da die Funktion und damit der Gültigkeitsbereich der Variable zu Ende ist!?
Gruß, Micha