performSelectorInBackgroundを使ってみた
うーん、あまり良い例じゃないかもしれませんが、
画像処理で時間が掛かる場合は、
この関数で処理をして、インジケーターを表示します。
こんな感じ。
{ // ボタンが押されたときに呼ばれる関数の中で
// インジケータを表示
[activityIndicator startAnimating];
// 別のスレッドで処理
[self performSelectorInBackground:@selector(foo:) withObject:bar];
}
- (void)foo:(id)arg
{
// 時間の掛かる処理
// インジケータを止めて非表示
[activityIndicator stopAnimating];
}
で、これだと、ボタン連打されたら困るねってなります。
先ほど、連打したらアプリが落ちました。
じゃぁ、どうしよー。
ボタンを押して処理が始まるなら、
処理を行っている間はボタンを無効にしましょう。
// 別スレッドを開始する前に myButton.enabled = FALSE; // 別スレッドの最後に myButton.enabled = TRUE;
こんな感じで回避します。
排他とか、面倒なことにならないに越したことないですね。
では、おやすみなさーい!
Leave a Comment