0

Instruments leaks 说这段代码泄露了:

NSString *name = [file substringToIndex:i];
Layer *actualLayer = nil;
for (Layer *lay in layers) {
    if ([lay.layerName isEqual:name]) {
        actualLayer = lay;
    }
}

name 是泄漏的对象。有一些奇怪的事情:它只是有时会泄漏,并非总是如此(这段代码在我的应用程序正常执行期间执行了数百次,但它只泄漏了 3-4 次)。另一个奇怪的事情是,我认为名称对象是一个自动释放对象,并且它永远不会明确地保留或释放,那么它怎么会泄露呢?

看一下堆栈,substringWithRange 是由 substringToIndex 调用的,所以我认为问题出在 substringToIndex 方法中。

4

2 回答 2

1

泄漏偶尔会报告误报。您发布的代码看起来不错,因此请检查周围的代码是否可能导致问题。特别是,使用 Build & Analyze 可以发现许多内存管理错误。如果您找不到问题,则有可能它不存在(在这种特殊情况下使用此特定工具)。

Bill Bumgarner 描述了另一种调试策略,使用 heapshot 工具,它可以在泄漏失败的地方成功。

于 2010-10-17T14:11:24.343 回答
0

虽然您在上面提供的代码显示没有泄漏,但如果泄漏表示此行发生泄漏:

actualLayer = lay;

然后查看实际层被分配、保留、复制等之前的任何地方。99% 的时间里,泄漏并不是一个神奇的“这里正是你需要修复的地方”。更多的是“这是我发现你泄露的地方,记住,泄露发生在此之前的某个时间。”

于 2010-10-17T14:31:07.817 回答