iOS开发之网络多线程

                                iOS开发之网络多线程

 1. pthred (POSIX) 一般情况不用

 2. NSThread

  1.   NSThread *thread1 = [[NSThread allocinitWithTarget:self selector:@selector(dealThreadExit:) object:nil];
  2.     [thread1 start];
  3.     [NSThread detachNewThreadSelector:@selector(detailTextLabel) toTarget:self withObject:nil];
  4.  
  5. [[NSNotificationCenter defaultCenteraddObserver:self selector:@selector(dealThreadExit:) name:NSThreadWillExitNotification object:nil];
  6.     [thread1 cancel];         // thread1 可以停止了
  7.     [thread1 isCancelled];  // thread1 是否可以停止
  8.     [NSThread exit];          // 停止当前线程
  9. //    [self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>] 让此方法在主线程中执行

 

 3.NSOperation

 

    //------------------NSOperationQueue----------

    //  立即执行

    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];

    [operationQueue addOperationWithBlock:^{

    }];

    //  设置线程池的最大并发数

    operationQueue.maxConcurrentOperationCount = 2;

    //  创建了一个可以放入线程池的线程

    NSInvocationOperation  *inth1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:nil];

    // 设置放入线程池的线程的优先级

    inth1.queuePriority = 1;

    [operationQueue addOperation:inth1];

    [NSThread isMainThread];//  当前的线程是否是主线程

    [NSThread isMultiThreaded]; // 当前的线程是否是

    [NSThread sleepForTimeInterval:1.0]; // 当前线程休眠xx秒

 4.GCD

    // 创建一个优先级任务

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    // 启动一个async 异步任务

    dispatch_async(queue, ^{

        for (int i=0; i<20; i++) {

            NSLog(@"A = %d",i);

        }

    });

    //  又启动一个异步任务

    dispatch_async(queue, ^{

        for (int i=0; i<20; i++) {

            NSLog(@"B = %d",i);

        }

    });

    

    //GCD最简单开启异步任务的形式 // 创建一个异步线程 传入优先级

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });

    // 开启一个任务在主线程上执行

    dispatch_async(dispatch_get_main_queue(), ^{

    });

 

    // 开启一个异步任务只执行一次

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    });

    

    //  开启一个异步任务组xxx 可以控制全部任务完成以后在执行什么任务

    // 开启一个异步任务xx 秒以后执行

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

    });

 

    // group 任务组  group是一个任务组 可以为他添加多个任务

    dispatch_group_t group = dispatch_group_create();

    

    //添加任务  7s完成      /任务组/                  / 优先级设置/

    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });

 

    // 10s完成

    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });

    

    // 这些任务全部是异步执行的   此方法检测当任务组 group 没有正在执行的任务的时执行.... 任务

    dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSLog(@"所有任务执行完成, 自动关机");

    });

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。