自从切换到XCode 4之后,泄漏工具显示了大量的泄漏,全部来自JSONKit和ASIHTTPRequest,运行了2分钟之后,我泄漏了数百个数组/字典/字符串(来自jk_create_dictionary、jk_parse_array、HTTPMessage:*等)。总共几个1000 KB。大多数堆栈跟踪都不是从我的任何调用中产生的,其余的都是完全无辜的。我很肯定这不是XCode 4之前的情况,我不知道谁是罪魁祸首。任何洞察力都会很好。
更新:
JSONKit泄漏可能是JSONDecoder缓存。
例如:
static JSONDecoder *decoder = nil;
if (!decoder)
decoder=[[JSONDecoder alloc] init];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]];
[request setCachePolicy:ASIDoNotWriteToCacheCachePolicy];
[request setCompletionBlock:^{
NSData *response = [request responseData];
NSDictionary *json = [decoder objectWithUTF8String:[response bytes] length:[response length]];
// ...
}];
[request setFailedBlock:^{
// ...
}];
[request startAsynchronous];发布于 2011-04-06 17:59:48
编辑:在阅读此答案的其余部分之前,:
如果你看到这样的内存泄漏,不要责怪仪器或
JSONKit.两者都是可靠的! ...Blame ,99.9%的可能性是您的代码泄露了您用JSONKit解析的数据!
END_OF_EDIT
这不是一个答案,更多的是一种补充,而是一种尝试去理解发生了什么,因为我也看到了仪器的泄漏。
我是这样使用JSONKit的:
NSArray *lines = [dataString componentsSeparatedByString:@"\n"];
for (NSString *line in lines) { // I know, strange format isn't? :)
NSDictionary *json = [line objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
// use dictionary data...
}@ssteinberg,,你就是这样泄露信息的吗?:

注意,在进行了一些重载测试后,有500个请求具有巨大的JSON响应,这说明泄漏是以MB (使用最新的gh版本)为单位的。
请注意,我是非常新的使用仪器,我不知道如何理解这些结果。据报道,是的,看起来像缓存.但我想确定..。
所以我开了一个GH问题,我希望@johnezang或者任何人,都能让我们了解到这一点。
如果这只是对仪器的误解,我很抱歉,我更喜欢这样:)
发布于 2011-04-01 06:44:15
根据苹果的WWDC 2010视频(高级内存分析与仪器),假阳性泄漏是罕见的。有时,泄漏工具漏掉了泄漏,但对于报告的工具来说,它是可靠的。我对静力学不太在行,但你有没有检查过,如果不释放解码器,你就没有分配解码器吗?如果它不被释放并且超出了范围,那就构成泄漏,对吗?
https://stackoverflow.com/questions/5417089
复制相似问题