如何在iOS7中安全地释放NSMutableString
问题描述:
-(void)showLog
{
NSMutableString* msgStr = nil;
msgStr = [NSMutableString stringWithFormat:@"%s","Log :"];
//show Log
[msgStr release];
}
这是我的代码。我经常从一个线程调用这个函数。我禁用了ARC,并且正在使用xcode 5在iOS Mini上测试iPad Mini。在XCode 5中,它显示连续的内存分配。即使我释放这msgStr
为什么它显示内存分配增量?如何在iOS7中安全地释放NSMutableString
任何帮助或建议将是伟大的。
答
stringWithFormat:
返回自动发布NSString
,因此您将其过度发布。它没有泄漏。内存分配将始终发生,如果不再发布或泄漏,这只会是一个问题。
你如何检查内存分配?你在使用仪器吗?
答
你在这里失踪
[NSMutableString stringWithFormat:@"%@",_someString];
该行创建一个自动释放的NSString对象,因为stringWithFormat
是一个工厂方法,该方法返回一个类型的NSString的实例变量的地步。
在第二行中,您将发布它。无需在此处执行此操作,它将从自动释放池中释放。
答
如果你想自我释放你NSString
情况下,像这样做:
-(void)showLog
{
NSMutableString* msgStr = nil;
msgStr = [[NSMutableString alloc] initWithFormat:@"%s", "Log :"];
//show Log
[msgStr release];
}
如果不改变msgStr
使用一个不变的字符串类型:
-(void)showLog
{
NSString* msgStr = [[NSString alloc] initWithFormat:@"%s", "Log :"];
//show Log
[msgStr release];
}
请解释一下你的意思通过“显示连续内存分配”。 – trojanfoe
您正在过度释放字符串。我不认为你正确理解内存情况。 – Chuck
我在我的线程中有一个while循环。在每次迭代中,我都会调用这个方法。每次它显示我的应用程序分配的内存更高的计数。 – sam18