重新分配NSString不释放内存

时间:2014-03-01 18:17:54

标签: ios iphone objective-c memory-management nsstring

关于[NSString stringWithFormat:@“”]我有一个奇怪的问题;
这是我的代码:

NSString *log;
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(someFunction) userInfo:nil repeats:YES];

- (void) someFunction
{
    log = [NSString stringWithFormat:@"a very big string here....."];
}

这一行“log = [NSString stringWithFormat];”非常快速地增加记忆 我找不到任何理由:(
顺便说一句,我使用ARC。

2 个答案:

答案 0 :(得分:2)

我不担心你的记忆没有被释放,因为正如你在这里看到的那样,我们非常同意你做的是正确的。

我担心的是为什么会像这样报告内存。我以为内存监视器可能正在报告分配(甚至会释放累积)。

我在这台机器上的XCode版本较低,没有内存显示器,所以我不能在这里查看。但我发现this link ...也许你可以查看他们对 Zombies 选项的看法。

此外,您可以使用乐器作为第二个工具来查看正在发生的事情。

答案 1 :(得分:0)

它增加了内存,因为stringWithFormat:方法生成了格式字符串的副本。由于日志变量似乎是一个实例变量,因此在释放包含类或类将日志设置为nil之前,ARC不会在日志上执行发布。

如果要快速释放分配给'log'的内存,则设置log = nil;在退出someFunction之前。