2012-06-06 103 views
3

我已经通过仪器运行了一个程序,它报告在此代码泄漏:为什么我的循环泄漏?

enter image description here

这是为什么?

+0

看起来像CPU利用率,而不是泄漏报告。那里的所有对象看起来像是在非ARC中被自动释放。你在使用ARC吗? – gaige

+0

它似乎不是泄漏。看看这些类似的参考:http://stackoverflow.com/questions/3953519/iphone-substringtoindex-substringfromindex-substringwithrange-memory-leak http://stackoverflow.com/questions/6698046/memory-leak-with-substringwithrange-nsstring – samfisher

+0

不,我不使用ARC ... –

回答

0

正如我之前所说,我不能在这里看到泄漏,但是一些代码更改可能会有助于摆脱可能的泄漏,因为您假设substringWithRange:正在产生泄漏。

以下代码使用基于块的枚举。另一个积极的影响:它知道如何处理非ASCII字符。

NSMutableArray *characters = [NSMutableArray array]; 
NSString *answer = @"Hello, Wørld!"; 
[answer enumerateSubstringsInRange:NSMakeRange(0, [answer length]) 
          options:NSStringEnumerationByComposedCharacterSequences 
         usingBlock:^(NSString *substring, 
            NSRange substringRange, 
            NSRange enclosingRange, 
            BOOL *stop) 
{ 
    [characters addObject:substring]; 
} 
]; 


[characters enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSLog(@"%@", obj); 
}]; 
+0

好吧,谢谢你的答案,但仪器仍然显示8泄漏NSString对象,我认为是块我的答案是分解成...所以...问题依然存在:( –

+0

比它必须是东西否则在你的代码中 - 这个肯定不会泄漏 – vikingosegundo

+0

你在做什么后面的角色? – vikingosegundo

1

这部分代码没有漏水。尝试运行分析仪,它可能会告诉你什么是泄漏。

+0

我会下注'characters'正在泄漏,而当泄漏时,显然它是唯一负责保留的东西泄漏 - 包括这里创建的所有字符串。 – Tommy