performSelectorInBackgroundを使ってみた

うーん、あまり良い例じゃないかもしれませんが、
画像処理で時間が掛かる場合は、
この関数で処理をして、インジケーターを表示します。

こんな感じ。

{	// ボタンが押されたときに呼ばれる関数の中で

	// インジケータを表示  
	[activityIndicator startAnimating];

	// 別のスレッドで処理
	[self performSelectorInBackground:@selector(foo:) withObject:bar];
}

- (void)foo:(id)arg
{
	// 時間の掛かる処理

	// インジケータを止めて非表示
	[activityIndicator stopAnimating];
}

で、これだと、ボタン連打されたら困るねってなります。
先ほど、連打したらアプリが落ちました。
じゃぁ、どうしよー。

ボタンを押して処理が始まるなら、
処理を行っている間はボタンを無効にしましょう。


// 別スレッドを開始する前に
myButton.enabled = FALSE;

// 別スレッドの最後に
myButton.enabled = TRUE;

こんな感じで回避します。
排他とか、面倒なことにならないに越したことないですね。

では、おやすみなさーい!

Leave a Comment