我用的是目标C和ARC。我有下面的代码片段,这似乎是由于字符串格式化程序而导致内存泄漏。

我将stringWithFormat方便性方法更改为更通用的alloc init,但它仍然泄漏了这一行的内存。

我读这里时说我应该使用copy关键字,但它仍然泄漏了这一行的内存。

现在,当我完全删除格式化程序时,代码不会泄漏这一行的内存。

其他信息:
代码库:
#define DATABASE_NAME @"orderwriter"
+ (SQLiteManager *) getSQLiteManager
{
// NSInteger userId = [(NSString *)[AppUtil NSDefaultforKey:USER_ID] integerValue];
// NSString *dbName = [NSString stringWithFormat:@"%@_%ld.db", DATABASE_NAME, (long)userId];
NSString *dbName = @"orderwriter_58.db";
SQLiteManager *dbManager = [[SQLiteManager alloc] initWithDatabaseNamed:dbName];
return dbManager;
}SQLiteManager类,我在Github上找到的。
发布于 2015-06-12 11:03:05
stringWithFormat方法返回一个自动释放的对象。它不会被释放,直到释放池被排出。您是否有可能在后台线程中运行?如果是这样的话,您可能需要在线程代码开始时创建一个自动释放池,并在完成时将其耗尽。
如果没有,我不知道你为什么会泄密。弧形应正确处理该字符串的所有权。它有可能是一个编译器错误。您使用的是什么版本的Xcode?
如果这不是一个自动发布池问题,那么您可能应该向Apple提交一个雷达漏洞。
https://stackoverflow.com/questions/30801384
复制相似问题