1

最近、プロジェクトを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チームにバグを報告します。

4

1 に答える 1

1

同じ32バイトのリークが見られます。そのようにリリースすることを考えていて、アップデートを監視していました。一度の32バイトのリークは大きな問題ではないようです。アプリがFlurryに登録されたときにのみ表示され、タスクがバックグラウンドから出るたびに表示されるわけではありません。私はFlurryバージョン3.0.2をiOS5.0をベースSDKとして使用しており、iOS4.1のターゲットを使用しています

Flurryのドキュメントを見ると、アプリケーションの起動についてのみレポートするように設定できるようです。

あなたの前に

[FlurryAnalytics startSession:id];

次の2つの呼び出しを追加します。

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

ドキュメントには、「OnPause」はデフォルトでオフになっていると書かれていますが、確かに害はありません。

また、Flurryにバグレポートを提出しました。

于 2011-11-26T04:41:57.173 に答える