首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串格式化程序中的内存泄漏

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

Stack Overflow用户
提问于 2015-06-12 10:57:30
回答 1查看 565关注 0票数 3

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

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

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

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

  1. 为什么这一行会导致内存泄漏?
  2. 我如何解决这个内存泄漏?

其他信息:

  • 用Xcode 6.3.1编写的代码
  • 使用Xcode 6.3.1中的仪器可视化内存泄漏
  • iOS部署目标: iOS 5.0

代码库:

代码语言:javascript
复制
#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上找到的。

EN

回答 1

Stack Overflow用户

发布于 2015-06-12 11:03:05

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

如果没有,我不知道你为什么会泄密。弧形应正确处理该字符串的所有权。它有可能是一个编译器错误。您使用的是什么版本的Xcode?

如果这不是一个自动发布池问题,那么您可能应该向Apple提交一个雷达漏洞。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30801384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档