1

我最近刚刚将我的项目升级到带有 ARC(自动引用计数)的 iOS 5,现在 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

编辑:

我只是尝试关闭所有调试变量,如僵尸,内存泄漏仍然完全相同。

编辑2:

好的,我已经确认这绝对是 Flurry 问题。取消通话后

[FlurryAnalytics startSession:<my id>];

我不再得到内存泄漏。

我会向 Flurry 团队提交一个错误。

4

1 回答 1

1

我看到相同的 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 提交了一份错误报告。

于 2011-11-26T04:41:57.173 回答