2012-03-18 12 views
18

私のアプリではスクロールビューと4つのテーブルビューがあります。 1つがドラッグされ、リリースされるたびに、私は48バイトのリークを取得します。これは本当に追加されます。ご覧のとおり、両方のリークグループには同じソースがあります。誰もこれの前にこのような漏れを見たことがありますか?UIScrollViewがリリースされるたびにメモリリーク




編集1:

私は漏れの隣にある矢印をクリックすると、私は漏れのために、この情報を取得する:

答えて

28

あなたが見ているのは、iOS 5.1の既知のバグで、iOS開発者フォーラムでそのように議論されています。フォーラムで "strdup"を検索することで、関連スレッドを見つけることができます。 「Elements App Memory Leak」というスレッドを参照してください。アップルの従業員からの投稿を検索します。

+0

ああ、そうです。この目的のために何もできないように見えます。レスポンスありがとう! –

+0

確かに、Stackって何? –

0

おそらく、あなたのせいです。

割り当て計器では、「i」ボタンを押して「レコード参照カウント」をオンにします。インストゥルメントは、これらのオブジェクトに発生したすべての割り当て、保持、自動解放、および解放イベントを表示できます。 (漏れた各アイテムの横に矢印が表示されます。そのオブジェクトの割り当て履歴を表示するには、そのアイテムをクリックしてください)。

あなたのコードのいくつかが間違っている保持される。おそらくスクロール・ビュー、またはそのジェスチャー認識子の1つ、推測として。

+0

レコード参照カウントはオンになっていますが、割り当て内のリークオブジェクトはどうやって見えますか?私は漏れたオブジェクトをLeaks(duh)で見ることができますが、保持/解放/自動リリースされた場所はわかりません。 –

+0

私はXcode 4.3.1を使用して、Instrumentsでプリセットの "Leaks"プリセットを使用しました。レコード参照カウントはすでにオンになっています。リークされたオブジェクトのリストでは、「アドレス」列に矢印アイコンがあります。クリックするとそのアドレスの履歴が表示されます。矢印が表示されない場合は、Instrumentsの設定で再生することをお勧めします。 –

+0

それが見つかりましたが、そこにある情報はあまり役に立ちません。私の結果で編集する。 –

0

回避方法:

この漏れたバイトがスクロールビュー内に格納されていることに気付きました。 あなたのスクロールビューを解放し、その状態を維持しながら、時々、再びスクロールビューを割り当てる必要があります。 スクロールビューを再ロードする必要があるときの検出方法は、アプリのニーズに応じて異なります。スクロールビューを解放するたびに、これらのバイトも解放されます。

+0

いいえ、私は時々allocとdeallocされたスクロールビューとテーブルビューを持っていて、それはリークを修正しません。解決策は、iosの公式修正を待つだけです。 –

0

回避方法:UIScrollViewデリゲートが設定されている場合、handlePan:でメモリリークが発生していました。デリゲートメソッドが必要なので、UIScrollViewをサブクラス化し、自分の@protocolを宣言しました。スクロールビューpanGestureRecognizerのターゲットセレクタをsuperに送信せずにオーバーライドしました。

//yourScrollView.h 
@protocol yourScrollViewDelegate 
-(void)yourProtocol; 
@end 

//yourScrollView.m 
-(void)handlePan:(id)sender{ 
    [yourDelegate yourProtocol]; 
} 
関連する問題