iOS 多线程

多线程

 

NSThread:

1.NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(thread) object:nil];

[thread start];

 

2.[NSThread detachNewThreadSelector:@selector(operation1) toTarget:self withObject:@"哈哈哈”];

 

3.[self performSelectorInBackground:@selector(thread:) withObject:@"hhhh"];

 

 

 

 

 

 

NSOperation:

优点:不需要管理生命周期,可以把精力放在代码上上面

     缺点:抽象类,必须要使用其子类对象才能用

顺序:

1.创建队列

2.创建任务

3.返回主线程

 

queue

[NSOperationQueue mainQueue]

 

回主线程

self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>

dispatch_async(dispatch_get_main_queue(), ^{

        

 

    });

 

1.NSOperationQueue *operationQ = [[NSOperationQueue alloc]init];

[operationQ addOperationWithBlock:^{

        //执行的事件

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

            NSLog(@"thread线程---》%d",i);

        }

       }];

 

2.NSOperationQueue *operationQ = [[NSOperationQueue alloc]init];

operationQ.maxConcurrentOperationCount = 2;

 

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

 

[invocation1 setQueuePriority:NSOperationQueuePriorityVeryLow];

 

[operationQ addOperation:invocation1];

 

 

 

 

GCD(Grand Central Dispath ):

优点

     多核硬件上,性能更佳

     操作简单,只要告诉GCD你要执行的任务,不需要管理线程

 

1.创建一个队列

(1)并行队列:可以多个线程同时执行

参数1.优先级(一般给0),参数2.标示(正常为0)

dispatch_queue_t queue = dispatch_get_global_queue(<#long identifier#>, <#unsigned long flags#>)

 

 

(2)串行队列:并发数为1,

参数1.线程名称(c字符串),参数2.直接给NULL

dispatch_queue_t queue = dispatch_queue_create(<#const char *label#>, <#dispatch_queue_attr_t attr#>)

 

 

 

2.任务

     异步:开辟新线程,在新线程上执行

     同步:在当前线程上执行

 (1)同步

//参数1.放入的队列,参数2.我们要做的任务

dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)

 

 

 

 

 

(2)异步

//参数1.放入的队列,参数2.我们要做的任务

dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)

 

 

 

 

 

3.返回

1.dispatch_async(dispatch_get_main_queue(), ^{

                        //回到主线程执行的任务

        });

2.self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>

 

 

 

 

 

 

//线程组

//    dispatch_group_t group = dispatch_group_create();

//    

//    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

//    

//    dispatch_group_async(group, queue, ^{

//        //子线程操作的内容

//    });

//    

//    

//    dispatch_group_notify(group, dispatch_get_main_queue(), ^{

//        //回到主线程之后做得操作

//    });

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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