我现在正在学习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;
}
这次调用方法需要释放这个内存,是吗?
答案 0 :(得分:2)
如果你遵循规则,你分配了内存,那么你有责任释放它。 90%的时间都可以使用。当然有一些例外。但总的来说它应该是好的。
在你的第一个例子中,你不必释放它,因为你没有自己分配内存,它是负责的stringWithString(我相信它正在进行自动释放)
在你的第二个和第三个例子中,你正在用alloc分配内存,因此你必须在完成内存后释放内存。
在第二个示例中,您正在使用自动释放,这意味着分配的内存最终将被释放。 (类似于Microsoft托管代码世界中的垃圾收集)。