我正在使用Objective C和ARC。我有以下代码片段,由于字符串格式化程序,它似乎泄漏了内存。
我将stringWithFormat
便捷方法更改为更通用的alloc init
,但它仍会在此行中泄漏内存。
我读here我应该使用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;
}
我在Github找到了SQLiteManager
课程。
答案 0 :(得分:1)
stringWithFormat方法返回一个自动释放的对象。在释放池耗尽之前,它不会被释放。你是否有机会在后台线程中运行?如果是这样,您可能需要在线程代码的开头创建一个自动释放池,并在完成后将其耗尽。
如果没有,那么我不确定你为什么会有泄漏。 ARC应该正确处理该字符串的所有权。它可能是编译器错误。您使用的是什么版本的Xcode? p>
如果它不是自动释放池问题,那么您应该向Apple提出雷达错误。