【问题标题】:Memory leaks when unarchiving取消归档时内存泄漏
【发布时间】:2011-09-21 10:59:35
【问题描述】:

如果我遇到内存泄漏问题,我将不胜感激。

我有一个数组中的数据,我已使用 NSKeyedArchiver 存档。我后来取消存档它。从功能的角度来看,它运行良好,但是当我运行 Instruments for Memory Leaks 时,我在取消归档时会出现内存泄漏。

这是代码:

NSArray *arrayToLoad = [[NSArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithFile:path]]; 

ballPath = [arrayToLoad copy];

[arrayToLoad release];

其中 ballPath 是一个 NSArray。

Instruments 表明 100% 的泄漏与上面代码中的第一行有关。我显然错过了一些东西,但无法找出什么。我认为 [NSKeyedUnarchiver unarchiveObjectWithFile:path] 是自动释放的,而 arrayToLoad 是释放的,所以我迷路了。

感谢任何建议。

【问题讨论】:

  • 你用完ballPath了吗?
  • 你对 ballPath 做了什么 - 它的保留计数应该在该代码的末尾为 1。

标签: objective-c ipad memory-leaks nsarray nskeyedarchiver


【解决方案1】:

谢谢各位。我只在使用arrayToLoad 的副本设置ballPath 后读取值。仍然没有弄清楚为什么我有内存泄漏,但是下面的代码可以工作,即使我一点也不为此感到自豪:

if ([ballPath retainCount] > 0) {
    [ballPath release];
}

NSArray *arrayToLoad = [[NSArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithFile:path]]; 

ballPath = [[NSArray alloc] initWithArray:arrayToLoad];

[arrayToLoad release];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多