0
나는 내 자신의 app-project에서 GCD를 배우고 싶습니다. 문제가 있습니다. 나는 쉽다라고 생각한다. 그러나 나는 그것을 어떻게 해결하는지에 관해 모른다.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;
}
그리고 나는 내 thumbnail
객체 뭔가를 할 ImageProcessing
클래스를 가지고 doThumbWithImage:andTag:
에서
dispatch_sync
을 사용하는 경우이 작업을위한 시간은 GCD가없는 경우와 같습니다. dispatch_async
을 사용하면 버튼의 thumbanils를 볼 수 없습니다. 나는 뭔가 잘못되었다는 것을 알고 있지만, 나는 무엇을 모른다.
어떻게 복구하나요?
도움에 감사드립니다.
감사합니다. 작동하지만 addSubview가 메인 대기열에 있어야하는 이유는 무엇입니까? 그걸 설명 할 수 있니? –
디스플레이 (UIViews)를 업데이트하거나 터치하는 모든 것이 기본 대기열에서 수행되어야합니다. 내 이해는 UI의 대부분이 스레드 안전하지 않거나 스레드가 안전하지 않다는 점입니다. –