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