2011-06-20 3 views
0

私は長時間実行しているタスクを実行している場合、実行のために別のスレッドを使用せずに、どのように一連の手順に分けることができますか?スレッドを使用せずに長時間実行されるタスクはどのように細かく分割されますか?

例えば、スプレッドシートアプリケーションがあり、大きなセル数の再計算が実行されるとしたら、モデルはどのようにしてそれを分割してチャンクにすることができますか?たとえば、チャンクを行い、イベントを投稿し、別のチャンクを行い、イベントをポストするなどの方法がありますか?

別のスレッドを使用する唯一の方法ですか?

私は読んだことがあるiosの書籍のスタックを持っていますが、私はいずれかのこのようなものの一つの言及を見つけることができません。

答えて

0

タイマーNSTimerを使用できますが、何か時間がかかる場合は、UIがハングアップするままになります。基本的には、あなたが行うすべての作業が約0.01秒(約)毎に<であることを確認し、各反復を少し遅らせてUIをより敏感にする必要があります。

スレッドを使用する理由は、OSが気にする必要がなく、スケジュールを設定できるようにするためです。メインスレッド上ですべてを実行すると(たくさんの作業をしようとしている場合)、UIをフリーズするか、スケジューリングについて常に心配する必要があります。スレッドを使用する場合、メインスレッドは適切な優先順位を持ち、UIは応答したままです。

+0

これは私の指摘です - いくつかのOS(私が知っているSymbianとBrew)は1つのスレッドしか持っていないので、時間のかかる作業を実行できます。これは、デッドロック、競合状態、変数へのアクセスをロックすることを心配する必要がなく、IDEのコードをステップ実行するために便利です。だから私は似たようなことが可能であれば私は期待していましたが、それはそうではないようです。 – Gruntcakes

1

マルチスレッドは、あなたが常にdelegation(私はちょうどそのデリゲートを使用して何かが起こるWHEオブジェクトのデリゲートにイベントを渡し、その用語を思い付いたと思います)を使用することができますオプション


することができます。ほとんどのiOS SDKオブジェクトではUITableView,NSURLConnectionなど多くのものがこれを使用しています。

+0

私は、可能な限り複数のスレッドを使用したくない、Symbianのアクティブオブジェクトに匹敵するメカニズムがない、またはBrewのポストイベントなど、複数のスレッドに頼らずに非同期性などを達成できるようにすること。 – Gruntcakes

0

あなたが求めるものは、プログレスバーのようなものをデザインする方法です。長い操作であらかじめ指定された時間に、オブジェクトまたはUIを更新します。この質問は多少恣意的で、私は本当にあなたの尋ねるものが分からない。しかし、マルチスレッドは長い操作の解決策です。

関連する問題