0

IOS 用の XCode4 でいくつかのアプリケーションを開発しているときに、奇妙な問題に遭遇しました。

NSThread では、無限ループで GUI 要素 (画像) を定期的に更新しています。それを更新するために、ループ内にバックグラウンド スレッドを作成し、更新操作は 0.1 秒ごとに処理されます。一方、プロファイル ビューを見ると、少量のメモリ (一定の 10kb) が 10 秒間リークしていました。

次に、NSThread の無限ループ内のコンポーネント更新操作のために performSelectorOnMainThread に切り替えただけで、リークは消えました。

これは回避しなければならない設計ミスなのか、ガベージ コレクターに関連するその他の基本的な落とし穴があるのでしょうか。

前もって感謝します。

4

1 に答える 1

1

これは、あらゆる種類の GC とはまったく関係ありません。iOS の Objective-C にはガベージ コレクションがありません。

また、はい、これは大きな設計ミスです。メインスレッドの呼び出しが頻繁に行われる無限ループのバックグラウンド スレッドか...

更新を実行ループに貼り付け、メインスレッドからのみ UIKit を呼び出し、そのメソッドを定期的に呼び出す必要がある場合は GCD を使用します (ただし、実際には必要ないので、これも再設計する必要がありますが、それを行うのは難しいです)。文脈なしで伝えてください。)

また、ディスパッチするすべてのスレッドに対して自動解放プールを作成することを忘れないでください。これは、デフォルトでは (ARC の下でさえ) 自動的に処理されないためです。

于 2013-04-17T12:06:07.217 に答える