Objective-C/Cocoa:我这里有内存泄漏吗?

Coo*_*coa 1 cocoa objective-c

我有一个看起来如下的调用方法:

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

我叫做的方法:

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

我在这里泄漏记忆吗?我觉得我在这里分配了不必要的金额.

Jar*_*die 6

不,你没有泄漏记忆,但是你在这里分配不必要金额的直觉是正确的.

至少,您应该考虑重写callingMethod为:

- (void)callingMethod
{
    NSMutableString *myStr = [self calledMethod];
}
Run Code Online (Sandbox Code Playgroud)

你也可以整理一下calledMethod:

- (NSMutableString*)calledMethod
{
    return [NSMutableString stringWithCapacity:0]; // why 0 capacity?
}
Run Code Online (Sandbox Code Playgroud)