2

iPadアプリのiOS4.2.1のUIScrollViewDelegateクラスでは、-scrollViewDidEndDecelerating:メソッドは次のような別のメソッドを呼び出します。

EntryModel *entry = [entries objectAtIndex:index];
self.titleLabel.text = entry.title;

titleEntryModelの非アトミックで保持されたNSStringプロパティです。titleLabelペン先で定義されたUILabelに接続するIBOutletを備えた、非アトミックな保持プロパティです。bbumのブログ投稿に続いて、私はHeapshot分析を使用しており、上記のコードをリークとして識別しました。新しいページにスクロールするたびにtitleLabel、少しリークが発生します。

代替テキスト

その2行目を次のように変更すると:

self.titleLabel.text = @"Whatever";

漏れが止まります:

代替テキスト

よくわかりません。-[UILabel text]新しい値を割り当てる前に古い値を解放していませんか?私はそうではないと思います、私は何か間違ったことをしているに違いありません。なぜこれがリークするのですか?

4

2 に答える 2

1

たぶん、あなたは実際にメモリをリークしていません。UILabelのtextプロパティはコピーセマンティクスを使用するため、メモリを割り当てています。したがって、を呼び出すself.titleLabel.textと、割り当ての右側にNSStringのコピーが作成されます。リーク機器を使用して実行し、メモリがリークしていないかどうかを確認してください。

于 2011-01-12T18:54:42.253 に答える
0

割り当てがゼロのヒープショット世代があることを考えると、それは一貫したメモリの増加ではありません。キャッシュしている可能性があります[間違っている]か、スクロールに関連するリークである可能性があり、イベントの亀裂から何かが落ちています。

割り当てを含むヒープショットの反復は何を示していますか?

于 2011-01-13T18:02:35.693 に答える