如何在iOS7中安全地释放NSMutableString

时间:2014-01-31 08:42:38

标签: objective-c memory-management nsmutablestring

-(void)showLog
{
    NSMutableString* msgStr = nil;

    msgStr = [NSMutableString stringWithFormat:@"%s","Log :"];

    //show Log

    [msgStr release];

}

这是我的代码。我经常从一个线程调用这个函数。我已经禁用了ARC,我正在使用xcode 5中的iOS 7测试iPad Mini,在XCode 5中,它显示了连续的内存分配。即使我发布了这个msgStr,为什么它会显示内存分配的增量?

任何帮助或建议都会很棒。

3 个答案:

答案 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];
}