需要帮助从GCD开始一个方法 - 许多电话

时间:2012-05-07 15:50:54

标签: objective-c grand-central-dispatch

我想在自己的应用程序项目中学习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时,我看不到按钮的缩略图。我知道有些事情是错的,但我不知道是什么。

我该如何修理?

谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可能需要在主线程中执行addSubview。您可以嵌套dispatch_async调用来处理它。