今天我用NSStrings
测试了一下。可悲的是,当我运行此代码时,我有严重的内存泄漏(xcode工具向我显示):
- (IBAction)start:(id)sender {
while (true) // Yes I know that this is an infinity loop
{
NSString *test = [[NSString alloc] init];
test = [NSString stringWithFormat:@"llalalallalalallalalalalallalalllallalalallalal"];
test = nil;
// Why does this leak memory ? I think ARC is releasing it automatically ?
}
}
这是这些乐器的截图:
请帮助我理解为什么此代码泄漏(ARC已启用)?
答案 0 :(得分:1)
内存只在自动释放池中,当池耗尽时内存将被回收。通常这是在运行循环循环时,但是在这样的紧密循环中,运行循环永远不会有机会因此需要明确地耗尽池。
在这样的情况下,只需在脚趾循环内添加一个自动释放池:
@autoreleasepool {
code
}
在这种情况下:
while (true) // Yes I know that this is an infinity loop
{
@autoreleasepool {
NSString *test = [[NSString alloc]init];
test = [NSString stringWithFormat:@"llalalallalalallalalalalallalalllallalalallalal"];
test = nil;
}
}
没有格式代码的BTW stringWithFormat
只是创建字符串,就像字面意思一样:
test = @"llalalallalalallalalalalallalalllallalalallalal";