-(void)showLog
{
NSMutableString* msgStr = nil;
msgStr = [NSMutableString stringWithFormat:@"%s","Log :"];
//show Log
[msgStr release];
}
这是我的代码。我经常从一个线程调用这个函数。我已经禁用了ARC,我正在使用xcode 5中的iOS 7测试iPad Mini,在XCode 5中,它显示了连续的内存分配。即使我发布了这个msgStr
,为什么它会显示内存分配的增量?
任何帮助或建议都会很棒。
答案 0 :(得分:5)
你在这里失踪的那一点
[NSMutableString stringWithFormat:@"%@",_someString];
这一行创建了一个autorelease nsstring对象,因为stringWithFormat
是一个工厂方法,它返回一个nsstring类型的实例变量。
在第二行你发布它。这里不需要这样做,它将从自动释放池中释放出来。
答案 1 :(得分:2)
stringWithFormat:
会返回一个自动释放的NSString
,因此您会过度释放它。它没有泄漏。内存分配将一直发生,如果不再发布或泄漏,只会出现问题。
如何检查内存分配?你在使用乐器吗?
答案 2 :(得分:0)
如果您想自行释放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];
}