String Formatter中的内存泄漏

时间:2015-06-12 10:57:31

标签: ios objective-c memory-leaks string-formatting instruments

我正在使用Objective C和ARC。我有以下代码片段,由于字符串格式化程序,它似乎泄漏了内存。

Memory leak in stringWithFormat

我将stringWithFormat便捷方法更改为更通用的alloc init,但它仍会在此行中泄漏内存。

Memory leak in initWithFormat

我读here我应该使用copy关键字,但它仍会在此行中泄漏内存。

Memory leak with copy property

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

No memory leak without formatter

  1. 为什么这行导致内存泄漏?
  2. 如何解决此内存泄漏?
  3. 其他信息:

    • 代码:Xcode 6.3.1
    • 使用以下方法显示内存泄漏:Xcode 6.3.1中的仪器
    • iOS部署目标:iOS 5.0

    代码库:

    #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课程。

1 个答案:

答案 0 :(得分:1)

stringWithFormat方法返回一个自动释放的对象。在释放池耗尽之前,它不会被释放。你是否有机会在后台线程中运行?如果是这样,您可能需要在线程代码的开头创建一个自动释放池,并在完成后将其耗尽。

如果没有,那么我不确定你为什么会有泄漏。 ARC应该正确处理该字符串的所有权。它可能是编译器错误。您使用的是什么版本的Xcode?

如果它不是自动释放池问题,那么您应该向Apple提出雷达错误。