这是一个我遇到问题的泄漏问题。这些代码大部分只是用于上下文,因此您可以看到“响应”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 CODE是
-(BOOL)scanJSONStringConstant:(NSString **)outStringConstant error:(NSError **)outError {
NSMutableString *theString = [[NSMutableString alloc] init];
if (outStringConstant != NULL) { *outStringConstant = [[theString copy] autorelease]; }
[theString release];
}