码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发之网络多线程

时间:2015-04-19 19:07:30      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

                                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(@"所有任务执行完成, 自动关机");

    });

 

iOS开发之网络多线程

标签:

原文地址:http://www.cnblogs.com/dahongliang/p/4428366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!