美文网首页
iOS线程常用方法记录一下

iOS线程常用方法记录一下

作者: llt00 | 来源:发表于2020-10-23 11:14 被阅读0次
1、自定义串行队列
// 串行队列 SERIAL
dispatch_queue_t queue = dispatch_queue_create("SERIAL", DISPATCH_QUEUE_SERIAL);

    // 防止循环引用 使用 __weak 修饰
    __weak typeof(self)weakSelf = self;
    // 异步任务 分线程中执行 不会阻塞主线程
    dispatch_async(queue, ^{
        [weakSelf eat];
    });
   // 同步任务 主线程中执行 会阻塞当前线程
    dispatch_sync(queue, ^{        
        [weakSelf eat];
    });
2、自定义并行队列
// 并行队列 CONCURRENT
dispatch_queue_t queue2 = dispatch_queue_create("CONCURRENT", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue2, ^{
    [weakSelf eat];
});
dispatch_sync(queue2, ^{
    [weakSelf eat];
});
3、获取系统的4个并行队列
    dispatch_queue_t queue4 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue4, ^{
        [weakSelf eat];
    });
4、子线程中执行完之后,回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
     // 更新UI
});
5、所有任务执行完成后回调(执行任务为同步请求)
   dispatch_group_t group = dispatch_group_create();
   dispatch_group_async(group,queue2,^{执行任务A});
   dispatch_group_async(group,queue2,^{执行任务B});
   dispatch_group_async(group,queue2,^{执行任务C});
   dispatch_group_notify(group, dispatch_get_main_queue(), ^{
       NSLog(@"queue2的所有任务都执行完了");
   });
6、网络异步请求--(利用group)所有任务执行完成后回调
@property (nonatomic, strong, nullable) dispatch_group_t serviceGroup;
[SVProgressHUD showModalLoading];
self.serviceGroup = dispatch_group_create();
[self loadData];//加载数据
dispatch_group_notify(self.serviceGroup, dispatch_get_main_queue(), ^{
        [SVProgressHUD dismissModalLoadingView];
});
- (void)loadData {
    WS(weakSelf);
    dispatch_group_enter(self.serviceGroup);
    NSMutableDictionary *parameter = [NSMutableDictionary dictionary];
    parameter[@""] = @"";
    [[NetWorkingManager shareManager] GET:@"" parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        dispatch_group_leave(weakSelf.serviceGroup);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];
}
7、网络异步请求--(利用信号量)按顺序执行
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self loadDataWithSemaphore:semaphore];
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    [self loadDataWithSemaphore:semaphore];
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    [self loadData3];
});

- (void)loadDataWithSemaphore:(dispatch_semaphore_t)semaphore {
    WS(weakSelf);
    NSMutableDictionary *parameter = [NSMutableDictionary dictionary];
    parameter[@""] = @"";
    [[NetWorkingManager shareManager] GET:@"" parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        dispatch_semaphore_signal(semaphore);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];
}

相关文章

  • iOS线程常用方法记录一下

    1、自定义串行队列 2、自定义并行队列 3、获取系统的4个并行队列 4、子线程中执行完之后,回到主线程 5、所有任...

  • iOS常用锁的研究

    iOS常用锁的研究 背景 iOS并发编程除了常用的多线程技术外,线程间同步的方法也是另外一个重要的点. 公司的项目...

  • iOS多线程

    iOS多线程 Thread 线程的创建 两种创建线程的方法 。常用属性: name Thread.sleep(fo...

  • Python多线程编程(二)

    我在Python多线程编程(一) 这篇文章中记录了一下threading模块的常用方法和两种写run()函数的方法...

  • python多线程和多进程

    Table of Contents 线程概念进程与线程的区别线程常用方法线程常用方法普通创建方式重写类,来实现启动...

  • iOS NSOperation学习及总结

    这篇文章对iOS多线程技术NSOperation的常用方法做了简单总结GCD请见这篇本文代码 NSOperatio...

  • iOS 常用组件-高效切圆角方法总结

    iOS 常用组件-高效切圆角方法总结 iOS 常用组件-高效切圆角方法总结

  • iOS中的多线程技术

    多线程 多线程技术是iOS开发里十分常见的,下面会介绍GCD的常用多线程技术。首先简单了解一下几个概念: 同步,异...

  • iOS 常用方法封装 分享一下

    iOS 常用方法封装 分享一下 欢迎补充 .h方法 + (NSString *)md5big:(NSString...

  • 2019-08-07 iOS多线程开发

    iOS开发常常会碰到多线程开发技术,我们常用的集中多线程开发的技术有一下几点:(1)pThread进行开发,pth...

网友评论

      本文标题:iOS线程常用方法记录一下

      本文链接:https://www.haomeiwen.com/subject/vmxvmktx.html