我最近刚用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
我只是尝试关闭所有调试变量,比如僵尸,内存泄漏仍然完全一样。
好的,我已经确认它肯定是乱舞问题。取消通话后
[FlurryAnalytics startSession:<my id>];
我不再收到内存泄漏。
我将向Flurry团队提交一个错误。
答案 0 :(得分: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提交了一份错误报告。