以下は、私のアプリケーションのメインスレッドとは別のスレッドで実行されるコードブロックです。各ボタンがサムネイルを取得した後、UIを更新するにはどうすればよいですか?現在、メソッド全体が終了するまで更新されません。ボタンはすでにUIScrollViewに追加されています。このスレッドの途中でUIを更新するにはどうすればよいですか?
(LotsGridButtonは、いくつかの余分な性質を持つだけUIButtonである。)
- (void)fetchThumbnails {
CCServer* server = [[CCServer alloc] init];
for (int i=0; i<[buttons count]; i++) {
LotsGridButton* button = [buttons objectAtIndex:i];
if (button.lot.thumbnail) continue;
// load the thumbnail image from the server
button.lot.thumbnail = [server imageWithPath:button.lot.thumbnailURL];
[button setImage:button.lot.thumbnail forState:UIControlStateNormal];
}
[server release];
}
甘いです!私はラッパーメソッドを作った(performSelectorは1つのargとsetImage:forState:2を取るため)これは「メインスレッドのウィジェットを変更するとすぐに変更が反映される」のような一般的なパターンのインスタンスですか? – lawrence
iPhoneでは、少なくとも、UIの更新はメインスレッドで行われます。ウィジェットをバックグラウンドスレッドから確実に更新することはできません。したがって、UI更新を実行するメインスレッドでメソッドを実行すると、UIの更新を高速化する可能性が高くなります。 –