Ios 重新分配NSString不';t空闲内存

Ios 重新分配NSString不';t空闲内存,ios,iphone,objective-c,memory-management,nsstring,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 ve

我对[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。

它增加了内存,因为stringWithFormat:方法复制了格式字符串。由于日志变量似乎是一个实例变量,ARC不会在日志上进行释放,直到释放包含的类或该类将log设置为nil


如果您想快速释放分配给“log”的内存,请在退出某个函数之前设置log=nil;

我不会担心内存没有释放,因为正如您在这里看到的,我们非常同意您所做的事情是正确的

我关心的是为什么会这样报告内存。我认为内存监视器可能会报告分配(甚至释放的内存会不断累积)

我在这台机器上的XCode版本更低,而且没有内存监视器,所以我不能在这里查看。但是我发现…也许你可以查看他们对僵尸选项的看法


您还可以使用Instruments作为第二个工具来查看发生了什么。

也许+[NSString stringWithFormat:]每次都会分配一个新字符串。此外,您每秒调用此方法20次。为什么必须分配一个“非常大的字符串”每0.05秒更新一次?-如果它是一个文本,你甚至可以避免创建一个新的副本。你有没有给
log
分配过不同的变量?这可以解释它一直保持活动状态。没有,我只使用了log一次:在这个函数中,这就是全部。请注意,在仪器中,你不必查看分配,分配将永远增加t是正常的。你必须看看漏洞!!!我也试过了,我写了:log=nil;log=[NSString stringWIthFormat:…];但内存仍在增加另一种方法是将长字符串分成更小的块,将它们分配给日志,处理日志,然后重用日志。嗯…不,我想让日志变量具有更新的内容。如果我按该顺序写入日志变量,则日志变量将始终为零:(嗯…真奇怪,事件的顺序内存正在增加:(log只在某个函数中使用吗?哦,是的,宝贝:D:D僵尸选项是一个很好的答案。我浪费了4-5个小时来纠正这个问题。谢谢你,伙计