gpt4 book ai didi

ios - 字符串格式化程序中的内存泄漏

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:48 26 4
gpt4 key购买 nike

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

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. 我该如何解决这个内存泄漏问题?

附加信息:

  • 代码编写于:Xcode 6.3.1
  • 内存泄漏可视化使用:来自 Xcode 6.3.1 的 Instruments
  • 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;
}

SQLiteManager 类,我在 Github 上找到了.

最佳答案

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

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

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

关于ios - 字符串格式化程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30801384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com