首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCode 4+仪器4:假阳性泄漏?

XCode 4+仪器4:假阳性泄漏?
EN

Stack Overflow用户
提问于 2011-03-24 09:29:31
回答 2查看 2.7K关注 0票数 6

自从切换到XCode 4之后,泄漏工具显示了大量的泄漏,全部来自JSONKit和ASIHTTPRequest,运行了2分钟之后,我泄漏了数百个数组/字典/字符串(来自jk_create_dictionary、jk_parse_array、HTTPMessage:*等)。总共几个1000 KB。大多数堆栈跟踪都不是从我的任何调用中产生的,其余的都是完全无辜的。我很肯定这不是XCode 4之前的情况,我不知道谁是罪魁祸首。任何洞察力都会很好。

更新:

JSONKit泄漏可能是JSONDecoder缓存。

例如:

代码语言:javascript
复制
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];
EN

回答 2

Stack Overflow用户

发布于 2011-04-06 17:59:48

编辑:在阅读此答案的其余部分之前,

如果你看到这样的内存泄漏,不要责怪仪器或JSONKit.两者都是可靠的! ...Blame ,99.9%的可能性是您的代码泄露了您用JSONKit解析的数据!

END_OF_EDIT

这不是一个答案,更多的是一种补充,而是一种尝试去理解发生了什么,因为我也看到了仪器的泄漏。

我是这样使用JSONKit的:

代码语言:javascript
复制
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或者任何人,都能让我们了解到这一点。

如果这只是对仪器的误解,我很抱歉,我更喜欢这样:)

票数 2
EN

Stack Overflow用户

发布于 2011-04-01 06:44:15

根据苹果的WWDC 2010视频(高级内存分析与仪器),假阳性泄漏是罕见的。有时,泄漏工具漏掉了泄漏,但对于报告的工具来说,它是可靠的。我对静力学不太在行,但你有没有检查过,如果不释放解码器,你就没有分配解码器吗?如果它不被释放并且超出了范围,那就构成泄漏,对吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5417089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档