IAM的有問題:併發隊列與GCD? (的iOS 4.2.1)
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0UL);
concurrentQueue
是nil
在iOS 4.2.1(裝置),但相同的代碼完美地工作,其運行iOS 5.0.1另一設備上。
當我檢查標題它說它是可用的,因爲iOS 4.0,我做錯了什麼?
下面的代碼從互聯網獲取圖片,並且在4.2.1之後的所有內容中都很好用,但是在4.2.1中並沒有,任何想法爲什麼?你可以使用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];
});
}
});
});
}
謝謝先生,我欣然接受了你的回答! – Konrad77
當DISPATCH_QUEUE_PRIORITY_BACKGROUND不可用時,自動將DISPATCH_QUEUE_PRIORITY_BACKGROUND替換爲DISPATCH_QUEUE_PRIORITY_LOW會很有幫助。 – slatvick
那麼在iOS 5之前將某些東西分派到後臺線程的最佳做法是什麼? – Tomen