NSMutableString内存管理让我感到困惑

时间:2010-12-22 16:14:10

标签: objective-c memory-management

我现在正在学习Objective-C,但是,这里有记忆管理难题让我很困惑。

让我看一下,在一个方法中,我创建一个NSMutableString,然后返回它。

- (NSMutableString *)methodNameWithParameter:(id)parameter
{
    NSMutableString *string = [NSMutableString stringWithString:@""];
    // do something
    return string; 
}

问题是谁负责释放这个记忆,打电话或打电话?

第二个例子:

- (NSMutableString *)methodNameWithParameter:(id)parameter
{
    NSMutableString *string = [NSMutableString alloc]init] autorelease];
    // do something
    return string; 
}

当内存释放后,它将在返回字符串后释放; 或者它将以通话方式发布,并且没有提及它。

第三个:

- (NSMutableString *)methodNameWithParameter:(id)parameter
{
    NSMutableString *string = [NSMutableString alloc]init]];
    // do something
    return string; 
}

这次调用方法需要释放这个内存,是吗?

1 个答案:

答案 0 :(得分:2)

如果你遵循规则,你分配了内存,那么你有责任释放它。 90%的时间都可以使用。当然有一些例外。但总的来说它应该是好的。

在你的第一个例子中,你不必释放它,因为你没有自己分配内存,它是负责的stringWithString(我相信它正在进行自动释放)

在你的第二个和第三个例子中,你正在用alloc分配内存,因此你必须在完成内存后释放内存。

在第二个示例中,您正在使用自动释放,这意味着分配的内存最终将被释放。 (类似于Microsoft托管代码世界中的垃圾收集)。