0

我想在我自己的应用程序项目中学习 GCD,但我遇到了问题。我认为很容易,但我不知道如何解决它。所以我有两种方法:

- (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 回答