文档章节

iOS开发多线程篇---多线程基础介绍和创建

琳小兮
 琳小兮
发布于 2015/02/28 17:25
字数 1084
阅读 84
收藏 1
  1. 线程的串行:

  2. 进程是指在系统中正在运行的一个应用程序,比如qq,酷狗音乐等。如果需要下载某首歌的话,就必须有线程(1个进程至少要有1条线程)。如果要在1个线程中执行多个下载任务,就只能一个一个的按照顺序去下载。就是说,同一个时间内,1个线程只能执行1个任务。

  3. 进程和线程的区别:

  4. 一个进程至少拥有一个线程——主线程,也可以拥有多个线程;一个线程必须有一个父进程。多个进程可以并发执行;一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

  5. 多线程的原理:

  6. 1个进程中可以开启多条线程,每条线程可以同时(并行)执行不同的任务,使用多线程可以提高程序的执行效率。在同一时间,CPU处理1条线程,只有1条线程在工作,多线程并发执行,其实就是CPU在快速的在多条线程之间切换(调度)。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。如果线程非常的多,CPU会在N多线程之间调度,消耗大量的CPU资源。每条线程被调度执行的频率就会降低。

  7. 多线程的优缺点:

  8. 多线程的优点是能适当提高程序的执行效率,能适当提高资源利用率(CPU、内存利用率),缺点是开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能,线程越多,CPU在调度线程上的开销就越大。

  9. 多线程在ios开发中的应用:

  10. 一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”。主线程的主要作用是显示/刷新UI界面/处理UI事件(比如点击事件、滚动事件、拖拽事件等)。在使用主线程的时候要注意的是,不要将比较耗时、轮询或者并发需求高等任务的操作放到主线程中。耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种“卡”的坏体验。例如网络请求,播放游戏的背景音乐等。

  11. 线程的创建和启动:

  12. 一个NSThread对象就代表一条线程,线程一旦启动,就会在线程thread中执行senderRun方法

  13. //创建线程1:selector:线程执行的方法,只能有一个参数,不能有返回值,target:selector消息发送的对象,argument(最后一个参数object):传输给target的唯一参数,也可以是nil
         NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(senderRun) object:nil];
         [thread start];
         //创建线程2
        [NSThread detachNewThreadSelector:@selector(senderRun) toTarget:self withObject:nil];
  14. 注:performSelectorInBackground方法本身是在主线程中执行的,而选择器指定的方法是在后台线程中进行的。尽管使用performSelectorInBackground方法调用的任务可以更新UI界面,但是在实际开发中,涉及到UI界面的更新操作,还是要使用performSelectorOnMainThread方法,以避免不必要的麻烦。

  15. //开启后台线程执行任务的方法
        [self performSelectorInBackground:@selector(senderRun) withObject:nil];
        //在后台线程中通知主线程执行任务的方法
        [self performSelectorOnMainThread:@selector(senderRun) withObject:nil waitUntilDone:NO];
        //线程的休眠
        [NSThread sleepForTimeInterval:1.0f];
  16. 获取当前主线程的2种方式:

  17.  NSThread *current=[NSThread currentThread];
     
     NSThread *main=[NSThread mainThread];

© 著作权归作者所有

共有 人打赏支持
琳小兮
粉丝 30
博文 37
码字总数 20169
作品 0
襄阳
程序员
私信 提问
【书坊赠书福利——第二期】《iOS 8开发指南》

本周是人邮IT书坊赠书的第二期,第一期参与度极高,微信君在此感谢你们的支持,第一期获奖赠书已全部寄出。 本周赠品 本周,微信君给大家推荐@人民邮电出版社-信息技术分社 刚刚上架的新书《...

生气的散人
2014/09/23
371
0
如何判断你是合格的高级iOS开发工程师?

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

_小迷糊
05/26
0
0
关于iOS多线程,这边勉强可以看看(OC&Swift)

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

Andy_Ron
08/26
0
0
[吐]滔哥帮单位招聘啦!!!

@叶秀兰 让我移个贴,,,,但这真的不是招聘了....大家懂了吗? iOS平台开发经验,能够独立完成开发,解决验证和修正测试中发现的问题, 对iPhone/iPad/Mac应用开发流程比较熟悉, 精通C、...

滔哥
2014/10/30
1K
21
iOS多种刷新样式、音乐播放器、仿抖音视频、旅游App等源码

iOS精选源码 企业级开源项目,模仿艺龙旅行App(http://www.code4app.com/thread-14774-1-1.html) 3D立体相册,可以旋转的立方体(http://www.code4app.com/thread-14966-1-1.html) 横竖屏切换...

Android爱开源
10/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

结合Spring和Groovy解决脚本热加载

前言 去年写过一篇文件介绍了采用jpython解决动态配置热加载的问题jpython解决热加载,今年在实现规则引擎过程中准备进行升级,采用groovy脚本解决。 方案 将一些规则相关,如统计,排序,过...

春哥大魔王的博客
6分钟前
0
0
以太坊应用开发接口:JSON RPC API

以太坊应用开发接口指的是以太坊节点软件提供的API接口,去中心化应用可以利用这个接口访问以太坊上的智能合约。以太坊应用开发接口采用JSON-PRC标准,通常是通过HTTP或websocket提供给应用程...

汇智网教程
10分钟前
0
0
排序--二分插入排序

二分插入排序是对直接插入排序的一个优化,在排序--直接插入排序中已经分析过直接插入排序的最坏时间复杂度是平方级别的,二分插入排序则是通过二分查找对寻找插入位置进行了优化,在找到插入...

FAT_mt
21分钟前
1
0
Quora点赞过万!麻省理工5.0GPA十条学习技巧

美国版知乎Quora上有个问题是:顶尖学生如何学习。排名第一的答案已经赢得13.5K次点赞,我们翻译出来分享给大家。 MIT normally does not rank its students. So if you hear that someone g...

乔老哥
34分钟前
1
0
IOC的学习(1)

1.IOC理论概要 java中,一个对象A怎么才能调用对象B? 当一个对象的构建,需要多个其他对象时,对象和对象有复杂的构建关系。spring帮助我们维系对象的依赖关系,降低系统的实现成本,前提是...

杨健-YJ
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部