这是我遇到的一个泄漏问题。大部分代码只是为了上下文,所以你可以看到“响应” NSData 对象不是泄漏的。
如果我深入到 touchJSON 代码,按照 LEAKS 工具给我的堆栈跟踪,泄漏显然是从这条线上开始的
*outStringConstant ....
但由于这是一个如此常用的库,我怀疑这是问题所在。
一注。这不会在第一次执行时泄漏,只会在以后的每次执行。但它泄漏了很多,所以响应数据可能是泄漏的实际数据。
另外,如果有人熟悉 touchJSON 和这段代码,你能向我解释一下这个 outStringConstant 变量是什么以及它的作用吗?除了被分配一个 theString 的副本之外,它似乎没有任何作用,但如果我删除该行,代码就会崩溃。
我的代码是
dataRequestURL = [NSString stringWithFormat:@"http://www....", ...];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:dataRequestURL] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&ts_response error:&ts_error];
NSArray *array = [[CJSONDeserializer deserializer] deserialize:response error:nil]; <- LEAKS HERE
TOUCHJSON 代码是
-(BOOL)scanJSONStringConstant:(NSString **)outStringConstant error:(NSError **)outError {
NSMutableString *theString = [[NSMutableString alloc] init];
if (outStringConstant != NULL) { *outStringConstant = [[theString copy] autorelease]; }
[theString release];
}