使用GCD线程更新加载For循环的图像 - iOS

时间:2013-04-11 14:43:27

标签: ios xcode multithreading grand-central-dispatch

我有以下For循环,它循环遍历NSMutableArray并调用setImage方法:

//Code to iterate through pictures and create ImageView class for each one.
for (int i =0; i<=[pictureThumbnailArray count]-1; i++) {
    NSLog(@"Thumbnail count is %d", [pictureThumbnailArray count]);
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
    [self setImage:[pictureThumbnailArray objectAtIndex:i]:i];
                   });
}

setImage方法在图片上设置各种参数,最后将其添加到主线程上的子视图中:

dispatch_sync(dispatch_get_main_queue(), ^(void) {
        [self.view addSubview:onePicture];
        });

问题是图像随机出现在屏幕上,而不是逐个加载。可以建议我如何改进这个吗?

感谢。

1 个答案:

答案 0 :(得分:0)

global background queue是并发的,而不是串行的,这意味着它不保证排序。您可以创建一个自定义串行队列:

dispatch_queue_t queue = dispatch_queue_create("com.example.MyQueue", NULL);

并在dispatch_async

中使用它