【发布时间】:2012-02-07 20:40:14
【问题描述】:
要解析 URL 的部分查询字符串,我使用此方法:
NSScanner *scanner = [[NSScanner alloc] initWithString:query];
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"&?"]];
NSString *parameterString = [NSString new];
while ([scanner scanUpToString:ampersand intoString:¶meterString])
{
NSScanner *parameterScanner = [[NSScanner alloc] initWithString:parameterString];
NSString *name = [NSString new];
[parameterScanner scanUpToString:isEqual intoString:&name];
NSString *value = [parameterString substringFromIndex:([name length] + 1)];
[parameters setObject:value forKey:name];
}
在这个项目中,我使用的是 ARC,但该方法仍然在这一行泄漏:
[parameterScanner scanUpToString:isEqual intoString:&name];
究竟是什么泄漏,我该如何解决?
【问题讨论】:
-
您是否通过 Instruments 的 Leaks 工具看到了这个泄漏?如果是这样,请转到下部面板并将显示选项从泄漏更改为周期和根以显示新的保留周期检测工具。这可能表明保留周期是否对 ARC 下的这种泄漏负责。此外,您可以使用 Allocations 工具中的 heap shot 功能来确定在上述代码的每次传递中究竟哪些对象正在泄漏。
-
name 变量泄漏,每次都通过上面的代码。有什么办法可以解决吗?
标签: iphone objective-c automatic-ref-counting nsscanner