XCode 4 + Инструменты 4: ложные положительные утечки? - PullRequest
6 голосов
/ 24 марта 2011

С момента перехода на XCode 4 инструмент утечки показывает много утечек, все из JSONKit и ASIHTTPRequest, после 2-минутного запуска я пропускаю сотни массивов / словарей / строк (из jk_create_dictionary, jk_parse_array, HTTPMessage :: *, и т.д.) на общую сумму несколько сотен кб. Большинство следов стека не происходят ни от одного из моих вызовов, а остальные абсолютно невинны. Я довольно уверен, что это был не случай до 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];

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

РЕДАКТИРОВАТЬ: Прежде чем читать остальную часть этого ответа:

Если вы видите такие утечки памяти, не вините инструменты или JSONKit ... Оба надежны!

... Вина себя , шансы 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 , у вас такие утечки? : JSONKitLeaks

Обратите внимание, что у меня было это после некоторого нагрузочного тестирования, 500 запросов с огромными ответами JSON, которые объясняют утечки в МБ ( с использованием последней версии gh )

Обратите внимание, что я совсем недавно использую Инструменты, и я не уверен, как понимать эти результаты. Согласно сообщенным кадрам, да, это похоже на кэширование ... но я бы хотел быть уверен ...

Итак, я открыл выпуск GH , я надеюсь, что @johnezang или кто-нибудь еще расскажет нам об этом.

Приношу свои извинения, если это просто недоразумение с инструментами, которое я бы предпочел:)

0 голосов
/ 01 апреля 2011

Согласно видео Apple WWDC 2010 (расширенный анализ памяти с помощью инструментов), утечка ложных срабатываний встречается редко. Иногда инструмент Leaks пропускает утечки, но он надежен для тех, о которых сообщает. Я не очень хорош со статиками, но вы проверили, чтобы убедиться, что вы не выделяете декодер, не выпуская его? Если он не выпущен и выпадает из области видимости, это будет утечка, верно?

...