私のアプリではスクロールビューと4つのテーブルビューがあります。 1つがドラッグされ、リリースされるたびに、私は48バイトのリークを取得します。これは本当に追加されます。ご覧のとおり、両方のリークグループには同じソースがあります。誰もこれの前にこのような漏れを見たことがありますか?UIScrollViewがリリースされるたびにメモリリーク
編集1:
私は漏れの隣にある矢印をクリックすると、私は漏れのために、この情報を取得する:
私のアプリではスクロールビューと4つのテーブルビューがあります。 1つがドラッグされ、リリースされるたびに、私は48バイトのリークを取得します。これは本当に追加されます。ご覧のとおり、両方のリークグループには同じソースがあります。誰もこれの前にこのような漏れを見たことがありますか?UIScrollViewがリリースされるたびにメモリリーク
私は漏れの隣にある矢印をクリックすると、私は漏れのために、この情報を取得する:
あなたが見ているのは、iOS 5.1の既知のバグで、iOS開発者フォーラムでそのように議論されています。フォーラムで "strdup"を検索することで、関連スレッドを見つけることができます。 「Elements App Memory Leak」というスレッドを参照してください。アップルの従業員からの投稿を検索します。
おそらく、あなたのせいです。
割り当て計器では、「i」ボタンを押して「レコード参照カウント」をオンにします。インストゥルメントは、これらのオブジェクトに発生したすべての割り当て、保持、自動解放、および解放イベントを表示できます。 (漏れた各アイテムの横に矢印が表示されます。そのオブジェクトの割り当て履歴を表示するには、そのアイテムをクリックしてください)。
あなたのコードのいくつかが間違っている保持される。おそらくスクロール・ビュー、またはそのジェスチャー認識子の1つ、推測として。
レコード参照カウントはオンになっていますが、割り当て内のリークオブジェクトはどうやって見えますか?私は漏れたオブジェクトをLeaks(duh)で見ることができますが、保持/解放/自動リリースされた場所はわかりません。 –
私はXcode 4.3.1を使用して、Instrumentsでプリセットの "Leaks"プリセットを使用しました。レコード参照カウントはすでにオンになっています。リークされたオブジェクトのリストでは、「アドレス」列に矢印アイコンがあります。クリックするとそのアドレスの履歴が表示されます。矢印が表示されない場合は、Instrumentsの設定で再生することをお勧めします。 –
それが見つかりましたが、そこにある情報はあまり役に立ちません。私の結果で編集する。 –
回避方法:
この漏れたバイトがスクロールビュー内に格納されていることに気付きました。 あなたのスクロールビューを解放し、その状態を維持しながら、時々、再びスクロールビューを割り当てる必要があります。 スクロールビューを再ロードする必要があるときの検出方法は、アプリのニーズに応じて異なります。スクロールビューを解放するたびに、これらのバイトも解放されます。
いいえ、私は時々allocとdeallocされたスクロールビューとテーブルビューを持っていて、それはリークを修正しません。解決策は、iosの公式修正を待つだけです。 –
回避方法:UIScrollViewデリゲートが設定されている場合、handlePan:でメモリリークが発生していました。デリゲートメソッドが必要なので、UIScrollViewをサブクラス化し、自分の@protocolを宣言しました。スクロールビューpanGestureRecognizerのターゲットセレクタをsuperに送信せずにオーバーライドしました。
//yourScrollView.h
@protocol yourScrollViewDelegate
-(void)yourProtocol;
@end
//yourScrollView.m
-(void)handlePan:(id)sender{
[yourDelegate yourProtocol];
}
ああ、そうです。この目的のために何もできないように見えます。レスポンスありがとう! –
確かに、Stackって何? –