对我来说,以下代码看起来会产生泄漏 - 尽管如此我可能错了:
-(NSString*) myString{
NSString* foo = @"bar";
return foo;
}
我的问题是:
1)由于foo
未被释放,是否会造成内存泄漏?
2)如果是内存泄漏,那我该如何避免呢?
答案 0 :(得分:4)
这不是泄漏。 @“bar”是静态分配的字符串,因此不需要保留foo。您可以像处理自动释放的对象一样处理这些字符串,尽管它们会在内存中抵制应用程序的运行时。
您可以通过返回[foo retain]
或[foo copy]
将其变为泄漏。
从技术上讲,保留静态变量是没有意义的。但如果你复制它们,你必须释放它们。
答案 1 :(得分:3)
简短回答。此代码不会泄漏。
答案很长:
使用NSString并不总是可见泄漏,因为字符串实习生并且因为您没有调用alloc / new / copy方法。但是,是的,这是一般的内存泄漏的经典点。
有两种方法可以处理它。
NSString *foo = [NSString stringWithString:@"bar"];
这个类似于:
NSString *foo = [[[NSString alloc] initWithString:@"bar"] autorelease];
因此,您将返回一个保留计数为1但仍自动释放的对象。因此,当NSAutoreleasePool被耗尽时,此对象将消失。