Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XCode 4 + Instruments 4: False positive leaks?

Ever since switching to XCode 4 the leaks tool shows a LOT of leakage, all from JSONKit and ASIHTTPRequest, after a 2 min run I am leaking hundreds of arrays/dictionaries/strings (from jk_create_dictionary, jk_parse_array, HTTPMessage::*, etc.) totaling a few 100s KB. Most of the stack traces don't originate in any of my calls, and the rest are completely innocent. I am pretty positive it was not the case pre-XCode 4. I don't know who the culprit is. Any insight would be lovely.

Update:
The JSONKit leaks are probably JSONDecoder caching.
For example:

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];
like image 218
unexpectedvalue Avatar asked Mar 24 '11 09:03

unexpectedvalue


1 Answers

EDIT : Before you read the rest of this answer:

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


Not an answer, more a complement, and an attempt to understand what's going on since I'm seeing leaks too with instruments.

I'm using JSONKit that way :

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, is that the kind of leaks you're having? : JSONKitLeaks

Note that I had this after some heavy load testing, 500 requests with huge JSON responses, which explains leaks are in MB (using latest gh version)

Please note that I'm quite new using Instruments, and I'm not sure how to understand these results. According to Frames reported, yes that looks like Caching... but I'd like to be sure...

So I opened an Issue on GH, I hope that @johnezang, or anyone, will enlight us about this.

All my apologies if that's just a misunderstanding with Instruments, which I would prefer :)

like image 185
Vincent Guerci Avatar answered Oct 15 '22 21:10

Vincent Guerci