0

自分のアプリプロジェクトでGCDを学びたいのですが、問題があります。簡単だと思いますが、どうやって解決すればいいのかわかりません。だから私は2つの方法があります:

- (void)viewDidLoad
{

[super viewDidLoad];

queue = dispatch_queue_create("com.fe.effect.load", NULL);

__block UIImage *th;

dispatch_sync(queue, ^{
    th = [self doThumbWithImage:thumbnail andTag:1];
    UIButton *btn1 = [self buttonWithFrame:CGRectMake(0, 0, 200, 100) andBackgroundImage:th andSelector:@selector(doEffect:) andTag:1];
    [self.view addSubview:btn1];
});


dispatch_sync(queue, ^{
    th = [self doThumbWithImage:thumbnail andTag:2];
    UIButton *btn2 = [self buttonWithFrame:CGRectMake(0, 100, 200, 100) andBackgroundImage:th andSelector:@selector(doEffect:) andTag:2];
    [self.view addSubview:btn2];
});

}

および2つの方法:

-(UIImage *)doThumbWithImage:(UIImage *)_img andTag:(int)_tag {

ImageProcessing *ip = [[ImageProcessing alloc] initWithImage:_img andTag:_tag];
[ip doImageProcessing];
_img = ip.image;
ip = nil;    

return _img;

}

そして、doThumbWithImage:andTag:私はImageProcessing自分のオブジェクトで何かをするクラスを持っていthumbnailます。

を使用する場合dispatch_sync、この操作の時間はGCDを使用しない場合と同じです。を使用するdispatch_asyncと、ボタンのつまみが見えません。私は何かが間違っていることを知っていますが、私は何を知りません。

どうすればこれを修復できますか?

助けてくれてありがとう。

4

1 に答える 1

1

おそらくメインスレッドでaddSubviewを実行する必要があります。それを処理するためにdispatch_async呼び出しをネストすることができます。

于 2012-05-07T15:57:06.110 に答える