我最近刚刚将我的项目升级到带有 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 团队提交一个错误。