Flurry Analytics - NSAutoreleasePool allocWithZone:] - утечка памяти после обновления до Objective-C ARC - PullRequest
1 голос
/ 07 ноября 2011

Я недавно обновил свой проект до iOS 5 с ARC (автоматический подсчет ссылок), и теперь Instruments сообщает об утечке памяти из NSAutoreleasePool после того, как приложение приостановлено в фоновом режиме.

Я подозреваю, что утечка вызвана Flurry Analytics на основе трассировки стека с этими двумя вызовами API:

+[FlurrySession sendSessionsToServerForSessionPause]
+[FlurrySession sendSessionsToServerWithTimeout:useWebView:requestAppCircleAds:requestVideoAds:requestAppSpotAds:sendCurrentSession:]

Я не делаю никаких вызовов Flurry API при приостановке. Единственный звонок, который нужно сделать, - это

[FlurryAnalytics startSession:<my id>];

при первом запуске приложения.

Заявленная утечка

Leaked Object   #       Address     Size        Responsible     Library Responsible Frame

NSAutoreleasePool,1     0x7693f600  32 Bytes    Foundation      +[NSAutoreleasePool allocWithZone:]

Трассировка стека

  10 libsystem_c.dylib thread_start
   9 libsystem_c.dylib _pthread_start
   8 Foundation __NSThread__main__
   7 Foundation -[NSThread main]
   6 iSURVEY +[FlurrySession sendSessionsToServerForSessionPause] /Developer/Applications/iPhoneAdAgent_modular/Classes/FlurrySession.m:931
   5 iSURVEY +[FlurrySession sendSessionsToServerWithTimeout:useWebView:requestAppCircleAds:requestVideoAds:requestAppSpotAds:sendCurrentSession:] /Developer/Applications/iPhoneAdAgent_modular/Classes/FlurrySession.m:962
   4 CoreFoundation +[NSObject(NSObject) alloc]
   3 Foundation +[NSAutoreleasePool allocWithZone:]
   2 CoreFoundation +[NSObject(NSObject) allocWithZone:]
   1 libobjc.A.dylib class_createInstance
   0 libsystem_c.dylib calloc

Edit:

Я только что попытался отключить все переменные отладки, такие как зомби, и утечка памяти все та же.

Редактировать 2:

Хорошо, я подтвердил, что это определенно проблема Flurry. После снятия звонка

[FlurryAnalytics startSession:<my id>];

У меня больше нет утечки памяти.

Я сообщу об ошибке команде Flurry.

1 Ответ

1 голос
/ 26 ноября 2011

Я вижу ту же самую 32-байтовую утечку.Я думал о том, чтобы выпустить его таким образом, и ожидал обновления.Однократная 32-байтовая утечка не кажется большой проблемой.Я вижу это только тогда, когда приложение регистрируется в Flurry, а не каждый раз, когда задача выходит из фона.Я использую Flurry версии 3.0.2 с iOS 5.0 в качестве базового SDK и целью iOS 4.1

Глядя на документы Flurry, похоже, что вы можете настроить его только для отчета о запуске приложения.

Перед вашим

[FlurryAnalytics startSession:id];

Добавьте следующие два вызова:

[FlurryAnalytics setSessionReportsOnCloseEnabled:NO];
[FlurryAnalytics setSessionReportsOnPauseEnabled:NO];

В документах сказано, что "OnPause" отключен по умолчанию, но это не повредитчтобы быть уверенным.

Я также подал отчет об ошибке в Flurry.

...