最近、プロジェクトをARC(自動参照カウント)を使用してiOS 5にアップグレードしましたが、アプリをバックグラウンドで一時停止した後、InstrumentsがNSAutoreleasePoolからのメモリリークを報告しています。
リークは、次の2つのAPI呼び出しを使用したスタックトレースに基づくFlurryAnalyticsが原因であると思われます。
+[FlurrySession sendSessionsToServerForSessionPause]
+[FlurrySession sendSessionsToServerWithTimeout:useWebView:requestAppCircleAds:requestVideoAds:requestAppSpotAds:sendCurrentSession:]
サスペンド時にFlurryAPI呼び出しを行っていません。慌てて行われる唯一の呼び出しは
[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チームにバグを報告します。