iOS开发

学无止境

多线程——barrier异步
  • 主要用于在多个异步操作完成之后,统一对非线程安全的对象进行更新,适合于大规模的 I/O 操作
  • 由于 NSMutableArray 是非线程安全的,如果出现两个线程在同一时间向数组中添加对象,会出现程序崩溃的情况
  • 使用 dispatch_barrier_async 添加的 block 会在之前添加的 block 全部运行结束之后,才在同一个线程顺序执行,从而保证对非线程安全的对象进行正确的操作!

模拟加载图片


- (void)loadPic:(NSInteger)index{
    dispatch_async(_queue, ^{
        NSLog(@"下载第%zd张图片,%@",index,[NSThread currentThread]);
        // 加载index指定的图片
        // 获得图片名字
        NSString *imageName = [NSString stringWithFormat:@"%zd.jpg",index];
        // 获得图片的全路径
        NSString *filePath = [[NSBundle mainBundle] pathForResource:imageName ofType:nil];
        // 加载图片
        UIImage *image = [UIImage imageWithContentsOfFile:filePath];
//         NSLog(@"添加图片到数组中====%@",[NSThread currentThread]);
//         [self.images addObject:image];
        dispatch_barrier_async(_queue, ^{
            NSLog(@"添加图片到数组中====%@",[NSThread currentThread]);
            // 将图片添加到数组中
            // NSMutableArray不是线程安全的类,如果同一时间多个线程同时添加元素到数组中,就会出现场问题。
            [self.images addObject:image];
        });
    });
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yi_zz32/article/details/49955887
文章标签: 线程
个人分类: OC
所属专栏: IOS 多线程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

多线程——barrier异步

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭