Iam gặp vấn đề với:Hàng đợi đồng thời với GCD? (IOS 4.2.1)
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0UL);
concurrentQueue
là nil
trên iOS 4.2.1 (thiết bị) nhưng cùng mã hoạt động hoàn hảo trên một thiết bị mà đang chạy iOS 5.0.1.
Khi tôi kiểm tra tiêu đề, nó cho biết nó có sẵn kể từ iOS 4.0, tôi có làm gì sai không?
Mã bên dưới tìm nạp hình ảnh từ internet và hoạt động tốt trong mọi thứ sau 4.2.1 nhưng không phải trong 4.2.1, bất kỳ ý tưởng nào tại sao? Bạn có thể tạo ra một hàng đợi đồng thời một số cách khác bằng cách sử dụng GCD?
- (void)imageFromURL:(NSString*)link {
if ([link length] == 0)
return;
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0UL);
if (concurrentQueue == nil)
return;
dispatch_async(concurrentQueue, ^{
__block UIImage* image = nil;
dispatch_sync(concurrentQueue, ^{
NSError *error = nil;
NSURL *url = [[NSURL alloc] initWithString:link];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSData *imageData = [NSURLConnection sendSynchronousRequest:request
returningResponse:nil
error:&error];
if (error == nil && imageData != nil) {
image = [UIImage imageWithData:imageData];
} else {
DLog(@"%@", [error description]);
}
if ([self.delegate respondsToSelector:@selector(setImage:)]) {
dispatch_sync(dispatch_get_main_queue(), ^{
[self.delegate setImage:image];
});
}
});
});
}
Cảm ơn bạn, tôi sẵn sàng chấp nhận câu trả lời của bạn! – Konrad77
Sẽ hữu ích khi tự động thay thế DISPATCH_QUEUE_PRIORITY_BACKGROUND thành DISPATCH_QUEUE_PRIORITY_LOW khi DISPATCH_QUEUE_PRIORITY_BACKGROUND KHÔNG có sẵn. – slatvick
Vì vậy, thực hành nào tốt nhất trước khi iOS 5 gửi một thứ gì đó đến một chuỗi nền? – Tomen