Instruments leaks表示此代码泄漏:
NSString *name = [file substringToIndex:i];
Layer *actualLayer = nil;
for (Layer *lay in layers) {
if ([lay.layerName isEqual:name]) {
actualLayer = lay;
}
}名称是泄漏的对象。有一些奇怪的事情:它只是偶尔泄漏,并不总是(在我的应用程序正常执行期间,这段代码被执行了数百次,但它只泄漏了3-4次)。另一件奇怪的事情是,我假设name对象是一个自动释放的对象,它从来没有明确地保留或释放过,那么它怎么会泄漏呢?
看看堆栈,substringWithRange是由substringToIndex调用的,所以我认为问题出在substringToIndex方法中。
发布于 2010-10-17 22:11:24
Leaks偶尔会报告误报。您发布的代码看起来没有问题,因此请检查周围的代码是否可能导致问题。特别是,使用Build & Analyze,它可以发现许多内存管理错误。如果你找不到问题,就有可能它不存在(在这个特殊的例子中,使用这个特殊的工具)。
Bill Bumgarner描述了另一种调试策略,using the heapshot instrument,它可以在泄漏失败的地方成功。
发布于 2010-10-17 22:31:08
虽然上面提供的代码显示没有泄漏,但如果泄漏表明此行发生了泄漏:
actualLayer = lay;然后看看在actualLayer被分配、保留、复制等之前的任何地方。泄漏并不是一种神奇的“这里正是你需要修复的地方”。它更多的是“这是我发现你泄露的地方,记住,泄漏发生在这之前的某个时候。”
https://stackoverflow.com/questions/3953519
复制相似问题