2009-04-06 10 views
1

Ich habe eine Berufung Methode, die wie folgt aussieht:Objective-C/Cocoa: Habe ich hier ein Speicherleck?

-(void)callingMethod 
{ 
    NSMutableString *myStr = [[[NSMutableString alloc] initWithCapacity:0] autorelease]; 
    myStr = [self calledMethod]; 
} 

Und meine gerufene Methode:

-(NSMutableString*)calledMethod 
{ 
    NSMutableString *newStr = [[NSMutableString alloc] initWithCapacity:0]; 
    // do some stuff with newStr 
    return [newStr autorelease]; 
} 

Bin ich überall hier Speicher undicht? Ich fühle mich, als würde ich hier eine unnötige Menge verteilen.

+0

Hoppla, calledMethod sollte NSMutableString zurückkehren * oder NSString * oder id . –

Antwort

6

Nein, Sie verlieren keine Speicher, aber Ihr Instinkt, dass Sie hier eine unnötige Menge zuweisen, ist korrekt. aufräumen Sie können auch die calledMethod als

- (void)callingMethod 
{ 
    NSMutableString *myStr = [self calledMethod]; 
} 

:

Zumindest sollten Sie die callingMethod als Umschreiben betrachten

- (NSMutableString*)calledMethod 
{ 
    return [NSMutableString stringWithCapacity:0]; // why 0 capacity? 
} 
+0

HAHAHAHA ... danke für den Schnitt Jason. Monkey see void, affe copy void :-) –

+0

Er gibt myStr nicht in CallingMethod frei. Ist das kein Speicherleck? – euphoria83

+0

Gute Frage ... nein, es ist nicht seit myStr ist Autoreleased, weil es mit dem Aufruf [NSMutableString StringWithCapacity] erstellt wurde (im Gegensatz zu mit [[NSMutableString Alloc] Init]) –

Verwandte Themen