UiScorllViewにリアルタイムで(メモリを節約するために)サブビューを動的に追加しようとしています。UiScrollViewにスムーズにサブビューを追加する
これを行うと、スクロールビューが1秒間ハングアップします...これを回避する方法は何ですか?
任意のヒントがUITableView
は、この問題を解決する方法をよく読んで
UiScorllViewにリアルタイムで(メモリを節約するために)サブビューを動的に追加しようとしています。UiScrollViewにスムーズにサブビューを追加する
これを行うと、スクロールビューが1秒間ハングアップします...これを回避する方法は何ですか?
任意のヒントがUITableView
は、この問題を解決する方法をよく読んで
を高く評価しました。ここで最も大きなパフォーマンスが得られるのは、サブビューの割り当てと初期描画ですが、主に割り当てになります。 UITableView
再利用識別子とメモリ内ヒープを使用して、スクロール時にすべてのセルをメモリに保持するので、新しいセルが表示可能領域にスクロールするたびに新しいセルを再割り当てするのではなく、すでに割り当てられているセルを再利用できます。
おそらく、あなた自身のサブビュー再利用システムを実装して、すべての割り当て時間を節約することができます。再び、UITableView
がどのようにそれを実行し、あなたのことをそれからモデル化するかを具体的に読んでください。残念ながら、私が考えることができるより簡単な解決策はありません。
ユーザーインターフェイスをハングアップさせる可能性のあるアクションはすべてスレッドに配置する必要があります。このようにして、サブビューを追加するプロセスはバックグラウンドで行われ、メインスレッドを妨害することはありません。
NSThread
でこれを行うこともできますし、NSOperationQueue
を実装することもできます。
NSThreadの宣言は単純です。 「MyFunctionのは」関数の名前に置き換えてください
[NSThread detachNewThreadSelector:@selector(myFunction:) toTarget:myObject withObject:argumentObject];
、オブジェクトと「myObjectという」(または単に状態self
あなたは、スレッドを処理するために、現在のクラスをしたい場合)と「argumentObject」でなければなりません引数として渡したいオブジェクトに置き換えられます。これはありますnil
関数自体は次のようになります。
-(void)myFunction {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
// do your thing here...
[pool release];
}
すべてのスレッドに自動解放プールが必要です。
1つのヒント。サブビューをアニメーション化する必要がある場合は、UIAnimation
ブロックを宣言してください。