文档章节

iOS多线程的创建

hejunbinlan
 hejunbinlan
发布于 2015/06/01 01:07
字数 745
阅读 11
收藏 0

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    

    //第一种创建线程的方式

    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(mutableThread:) object:@"第一种创建线程的方式"];

    [thread start];//启动线程

    

    //第二种创建线程的方式

    //创建并执行线程

    [NSThread detachNewThreadSelector:@selector(mutableThread:) toTarget:self withObject:@"第二种创建线程的方式"];

    

    //第三种创建线程的方式(NSObject带的方法)

    [self performSelectorInBackground:@selector(mutableThread:) withObject:@"第三种创建线程的方式"];

    

    //并行编程的方式创建线程

    //并行编程技术分类为:Operation Queue 和 GCD(Grand Central Dispatch),GCD包括:Dispatch Queue 和Dispatch Source

    //第四种创建线程的方式

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

    //会开启一个多线程,调用block

    [operationQueue addOperationWithBlock:^{

        NSLog(@"第四种创建线程的方式");

    }];

    

    //第五种创建线程的方式

    //线程池,线程队列,操作队列,用于管理线程,可以控制并发数,优先级

    //线程池的创建

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

    //设置线程池并发数

    //如果没有设置最大并发数,那么并发的个数是由系统内存和CPU决定的,可能内存多就开多一点,内存少就开少一点。

    //最大并发数不要乱写(5以内),不要开太多,一般以2~3为宜,因为虽然任务是在子线程进行处理的,但是cpu处理这些过多的子线程可能会影响UI,让UI变卡

    operationQueue2.maxConcurrentOperationCount = 1;

    

    //线程的创建

    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:@"第五种创建线程的方式,第一个线程"];

    //设置线程的优先级,优先级高的任务,调用的几率会更大。

    [operation1 setQueuePriority:NSOperationQueuePriorityVeryLow];

    

    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:@"第五种创建线程的方式,第二个线程"];

    //设置线程的优先级,优先级高的任务,调用的几率会更大。

    [operation2 setQueuePriority:NSOperationQueuePriorityVeryLow];

    

    NSInvocationOperation *operation3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:@"第五种创建线程的方式,第三个线程"];

    //设置线程的优先级

    [operation3 setQueuePriority:NSOperationQueuePriorityVeryHigh];

    

    //设置依赖

//    [operation1 addDependency:operation2];

    

    //将创建的线程添加到线程池中

//    [operationQueue2 addOperation:operation1];

//    [operationQueue2 addOperation:operation2];

//    [operationQueue2 addOperation:operation3];

    [operationQueue2 addOperations:@[operation1,operation3] waitUntilFinished:NO];

    NSLog(@"------");

    

    //第六种创建线程的方式GCD方式

    //创建一个队列,串行队列

    dispatch_queue_t queue = dispatch_queue_create("test", NULL);

    //创建异步线程

    dispatch_async(queue, ^{

        //多线程

        NSLog(@"第六种创建线程的方式-多线程");

        //回到主线程执行

        dispatch_sync(dispatch_get_main_queue(), ^{

            //主线程

            NSLog(@"第六种创建线程的方式-主线程");

        });

    });

    return YES;

}


- (void)mutableThread:(NSString *)data {

    

    NSLog(@"%@ is called! %@",NSStringFromSelector(_cmd),data);

    //waitUntilDone:YES:表示等updateUI执行完才能往下执行

    [self performSelectorOnMainThread:@selector(updateUI:) withObject:@"update UI" waitUntilDone:YES];

}


- (void)updateUI:(NSString *)data {

    NSLog(@"%@ is called! %@",NSStringFromSelector(_cmd),data);

    BOOL isMainThread = [NSThread isMainThread];

    if (isMainThread) {

        NSLog(@"是主线程");

    }

}


- (void)thread1:(NSString *)data {

    NSLog(@"%@ is called! %@",NSStringFromSelector(_cmd),data);

//    NSLog(@"thread name=%@",[NSThread currentThread].name);

    BOOL isMultiThread = [NSThread isMultiThreaded];

    if (isMultiThread) {

        NSLog(@"是多线程");

    }

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

//        NSLog(@"thread1:%d",i);

//    }

}


- (void)thread2:(NSString *)data {

    NSLog(@"%@ is called! %@",NSStringFromSelector(_cmd),data);

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

        NSLog(@"thread2:%d",i);

    }

}


© 著作权归作者所有

上一篇: Manuscript
下一篇: View 绘制流程
hejunbinlan
粉丝 41
博文 596
码字总数 21569
作品 0
浦东
高级程序员
私信 提问
关于iOS多线程,这边勉强可以看看(OC&Swift)

iOS开发多线程总是绕不过的坎,看了很多前辈们优秀的文章,如:关于iOS多线程,我说,你听,没准你就懂了!、谈iOS多线程(NSThread、NSOperation、GCD)编程、iOS多线程:『GCD』详尽总结、i...

Andy_Ron
2018/08/26
0
0
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
为何提高iOS技能?

如题,我的困惑 去年11月份自学,今年3月份辞职正式转型做iOS工作,但是项目一直到6月份都是自己做,感觉提升很慢,算是个中级偏下水平 求教iOS朋友,你们是怎么提升自己的? 书单 《Effecti...

卧龙小
2015/09/18
1K
11
如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊
2018/05/26
0
0
iOS开发的你,现在准备脱坑还是继续进阶呢?

序言 我相信很多人都在说,iOS行业不好了,iOS现在行情越来越难了,失业的人比找工作的人还要多。失业即相当于转行,跳槽即相当于降低自己的身价。那么做iOS开发的你,你是否在时刻准备着跳槽...

_小迷糊
2018/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
9
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
7
0
安装Genymotion模拟器慢的解决方案

第一步点击下载, C:\Users\Administrator\AppData\Local\Genymobile\genymotion.log 中搜索 ova 会发现这个文件 使用迅雷下载即可. 在 虚拟机中导入这个.ova 文件 即可安装...

chenhongjiang
今天
5
0
4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)

你好,我是彤哥,本篇是netty系列的第四篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的N...

彤哥读源码
今天
7
0
如何把握好面试的最后一问 ?

如何把握好面试的最后一问 ? 你有没有听过这句话 “ 你还有什么问题想问我的吗? ” 如何把握好面试的最后一问 ? 要积极稳妥,切莫减分、丢分、扣分。比如,你提问的问题很傻很天真,比如你提...

编程三分钟
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部