iOS开发之网络多线程
iOS开发之网络多线程
1. pthred (POSIX) 一般情况不用
2. NSThread
- NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(dealThreadExit:) object:nil];
- [thread1 start];
- [NSThread detachNewThreadSelector:@selector(detailTextLabel) toTarget:self withObject:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealThreadExit:) name:NSThreadWillExitNotification object:nil];
- [thread1 cancel]; // 叫thread1 可以停止了
- [thread1 isCancelled]; // 看thread1 是否可以停止
- [NSThread exit]; // 停止当前线程
- // [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(@"所有任务执行完成, 自动关机");
});
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。