加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – XCode 4仪器4:误报泄漏?

发布时间:2020-12-14 19:39:01 所属栏目:百科 来源:网络整理
导读:自从切换到XCode 4后,泄漏工具显示出大量泄漏,全部来自 JSONKit和ASIHTTPRequest,运行2分钟后,我泄漏了数百个数组/字典/字符串(来自jk_create_dictionary,jk_parse_array,HTTPMessage :: *等)总计几百英尺KB.大多数堆栈跟踪不是源于我的任何调用,其余的完全
自从切换到XCode 4后,泄漏工具显示出大量泄漏,全部来自 JSONKit和ASIHTTPRequest,运行2分钟后,我泄漏了数百个数组/字典/字符串(来自jk_create_dictionary,jk_parse_array,HTTPMessage :: *等)总计几百英尺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];

解决方法

编辑:在您阅读本答复的其余部分之前:

If you see that kind of memory leaks,don’t blame Instruments or JSONKit… Both are reliable!

Blame yourself,99.9% chances your code is leaking the data you parsed with 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为单位(using latest gh version)

请注意,我使用乐器很新,我不知道如何理解这些结果.据Frames报道,是的,看起来像缓存…但我想确定…

所以我开了一个Issue on GH,我希望@johnezang,或者其他任何人,都会对此表示满意.

如果这只是对乐器的误解,我会道歉,我更喜欢:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读