我正在使用 ARC ,每次调用以下代码时。我发现“Live Bytes”每次都会增加一点。这里必须有内存泄漏。
char* example = (char *)sqlite3_column_text(compiledStatement, 1);
label.text = [NSString stringWithUTF8String:example];
但是如果我这样做,内存将永远保持在一个字节数上。但label.text内容不是我想要的确切单词,它就像“&#(&(* @#)#@ $”一样腐败。
char* example = (char *)sqlite3_column_text(compiledStatement, 1);
label.text = [NSString stringWithFormat:@"%s",example];
答案 0 :(得分:1)
老问题,但仍然是实际的:
@jlegakis已经指出,这可能是一个“自动释放问题”。
我只是想提出一种不同的方法来从{em>类工厂方法中删除自动释放的返回对象,如[NSFoo fooWith...]
:
相反,如果你使用模式
NSFoo* foo = [[NSFoo alloc] initWith...]
创建的对象未自动释放。所以,如果你写:
char* example = (char *)sqlite3_column_text(compiledStatement, 1);
label.text = [[NSString alloc] initWithUTF8String:example];
“自动释放问题”应该消失。
答案 1 :(得分:0)
尝试以这种方式读取字符串,看看是否发生了任何变化。
char* example = (char *)sqlite3_column_text(compiledStatement, 1);
label.text = [NSString stringWithFormat:@"%@",example];
答案 2 :(得分:0)
我遇到了完全相同的问题。事实证明是因为stringWithUTF8String在内部使用自动释放,所以直到封闭的自动释放池块结束时才释放内存(在我的情况下是整个应用程序)。
作为实验,试试这个:
@autoreleasepool {
char* example = (char *)sqlite3_column_text(compiledStatement, 1);
label.text = [NSString stringWithUTF8String:example];
}
你应该看到实时字节停止增长。