ios线程的五种使用方式
Posted 金融家中的懂编程者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios线程的五种使用方式相关的知识,希望对你有一定的参考价值。
- //第一种方式 手动创建并启动
- NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(method) object:nil];
- [t start];
- //第二种方式 类方法
- [NSThread detachNewThreadSelector:@selector(method) toTarget:self withObject:nil];
- //第三种方式 类方法
- [self performSelectorInBackground:@selector(method) withObject:nil];
- //第四种方式 block 语法
- NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
- //会开启一个多线程,调用block
- [operationQueue addOperationWithBlock:^
- for (int i=0; i<50; i++)
- NSLog(@"多线程:%d", i);
- ];
- //第五种 线程队列(线程池)
- NSOperationQueue *operationQueue2 = [[NSOperationQueue alloc] init]; //相当于一个线程池,里面可以放很多线程,这个线程池管理多个线程的调度,可以给线程设置优先级,并发数
- operationQueue2.maxConcurrentOperationCount = 1; //设置最大并发数量(并发=同时进行)
- //创建线程
- NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1) object:nil];
- //设置线程的优先级
- [operation1 setQueuePriority:NSOperationQueuePriorityVeryLow];
- NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1) object:nil];
- [operation2 setQueuePriority:NSOperationQueuePriorityVeryHigh];
- //将线程添加到线程池
- [operationQueue2 addOperation:operation1];
- [operationQueue2 addOperation:operation2];
- //----------------------回到主线程--------------------------------
- //在多线程中可能加载数据,加载完了之后要刷新ui, ui必须在主线程上面操作,在多线程的方法中这样调用
- [self performSelectorOnMainThread:@selector(thread1) withObject:nil waitUntilDone:YES];
- //-----------------第六种线程的使用方式--------------
- //这个函数是C的函数,字符串test也要用C里面的字符串,是不带@符号的
- dispatch_queue_t queue = dispatch_queue_create("test", NULL);
- dispatch_async(queue, ^
- for (int i=0; i<50; i++)
- NSLog(@"多线程:%d", i);
- //回到主线程执行
- dispatch_async(dispatch_get_main_queue(), ^
- if ([NSThread isMainThread])
- NSLog(@"是主线程");
- );
- );
ios代码
- -(void)thread1
- //这里是开启了一个新的线程,所以新的线程跟主线程脱离关系了,这个里面的内存管理,我们需要自己创建一个自动释放池
- //创建自动释放池
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- NSLog(@"执行多线程");
- [pool release];
以上是关于ios线程的五种使用方式的主要内容,如果未能解决你的问题,请参考以下文章