iOS开发多线程篇—多线程简介

一、进程和线程

1.什么是进程

进程是指在系统中正在执行的一个应用程序

每一个进程之间是独立的。每一个进程均执行在其专用且受保护的内存空间内

比方同一时候打开QQ、Xcode,系统就会分别启动2个进程

通过“活动监视器”能够查看Mac系统中所开启的进程

2.什么是线程

1个进程要想运行任务,必须得有线程(每1个进程至少要有1条线程)

线程是进程的基本运行单元,一个进程(程序)的全部任务都在线程中运行

比方使用酷狗播放音乐、使用迅雷下载电影,都须要在线程中运行

  

3.线程的串行

1个线程中任务的运行是串行的

假设要在1个线程中运行多个任务,那么仅仅能一个一个地按顺序运行这些任务

也就是说,在同一时间内,1个线程仅仅能运行1个任务

比方在1个线程中下载3个文件(各自是文件A、文件B、文件C)

二、多线程

1.什么是多线程

1个进程中能够开启多条线程,每条线程能够并行(同一时候)运行不同的任务

进程 ->车间,线程->车间工人

多线程技术能够提高程序的运行效率

比方同一时候开启3条线程分别下载3个文件(各自是文件A、文件B、文件C)

2.多线程的原理

同一时间。CPU仅仅能处理1条线程。仅仅有1条线程在工作(运行)
多线程并发(同一时候)运行。事实上是CPU高速地在多条线程之间调度(切换)
假设CPU调度线程的时间足够快。就造成了多线程并发运行的假象
思考:假设线程很许多,会发生什么情况?
CPU会在N多线程之间调度。CPU会累死,消耗大量的CPU资源
每条线程被调度运行的频次会减少(线程的运行效率减少)

3.多线程的优缺点

多线程的长处

能适当提高程序的运行效率

能适当提高资源利用率(CPU、内存利用率)

多线程的缺点

开启线程须要占用一定的内存空间(默认情况下。主线程占用1M,子线程占用512KB)。假设开启大量的线程,会占用大量的内存空间,减少程序的性能

线程越多,CPU在调度线程上的开销就越大

程序设计更加复杂:比方线程之间的通信、多线程的数据共享

4.多线程在iOS开发中的应用

主线程:一个iOS程序执行后,默认会开启1条线程。称为“主线程”或“UI线程”

主线程的主要作用

显示\刷新UI界面

处理UI事件(比方点击事件、滚动事件、拖拽事件等)

主线程的使用注意:别将比較耗时的操作放到主线程中。

耗时操作会卡住主线程,严重影响UI的流畅度。给用户一种“卡”的坏体验

5.代码演示样例

 1 //
 2 //  YYViewController.m
 3 //  01-堵塞主线程
 4 //
 5 //  Created by apple on 14-6-23.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8
 9 #import "YYViewController.h"
10
11 @interface YYViewController ()
12 - (IBAction)btnClick;
13 @end
14
15
16 @implementation YYViewController
17
18
19 - (void)viewDidLoad
20 {
21     [super viewDidLoad];
22 }
23
24
25 //button的点击事件
26 - (IBAction)btnClick {
27     //1.获取当前线程
28     NSThread *current=[NSThread currentThread];
29     //2.使用for循环运行一些耗时操作
30     for (int i=0; i<10000; i++) {
31         //3.输出线程
32         NSLog(@"btnClick---%d---%@",i,current);
33     }
34 }
35
36 @end

运行效果:

说明:当点击运行的时候,textView点击无响应。

运行分析:等待主线程串行运行。

开启子线程。

转载于:https://www.cnblogs.com/mengfanrong/p/5109969.html

iOS开发多线程篇—多线程简介相关推荐

  1. iOS开发网络篇—多线程断点下载

    iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...

  2. iOS开发UI篇—CALayer简介

    iOS开发UI篇-CALayer简介 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UI ...

  3. iOS开发UI篇—UIButton简介

    1.应用场景,文字居左,图片居中 //设置图片间距,使其居右对齐,12是间距 btn.imageEdgeInsets = UIEdgeInsetsMake(0,btn.size.width - 12 ...

  4. iOS 开发中的多线程

    线程.进程 什么是线程.进程   有的人说进程就像是人的脑袋,线程就是脑袋上的头发~~.其实这么比方不算错,但是更简单的来说,用迅雷下载文件,迅雷这个程序就是一个进程,下载的文件就是一个线程,同时下载 ...

  5. iOS开发拓展篇—CoreLocation简单介绍

    iOS开发拓展篇-CoreLocation简单介绍 一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 ...

  6. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇-使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  7. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  8. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  9. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

最新文章

  1. 如何利用离散Hopfield神经网络进行高校科研能力评价(2)
  2. [启发式搜索/A*] [SCOI2005]骑士精神题解
  3. JAVA-WBE——spring security 3.2 认证-学习笔记2
  4. 【18】ASP.NET Core MVC 中的 Model介绍
  5. 2010年 Web的五项技术和五个趋势
  6. VS2013常用设置和其他
  7. 不用加好友,查看对方校内照片
  8. RN学习(一)——创建第一个RN项目
  9. java biginteger相比_java Biginteger类
  10. cad面积累计lisp怎么用_CAD连续面积标注lisp插件
  11. shell脚本学习指南——好书推荐
  12. DM420步进电机驱动器
  13. 开关电源电路图及原理12v分析-详细版
  14. 企业网站内容维护日常工作有哪些
  15. 解读—revealing deep semantic commercial patterns:Insights from urban landscape depiction
  16. tensorboard--曲线图颜色深浅两条线
  17. 创建电脑对象,电脑对象有关机和开机方法(静态对象构造方法)
  18. 2016届360公司PHP服务端开发笔试和面试之所得所感
  19. 仿个人税务 app html5_观天下| 注意!你下载的可能是假“个税APP”
  20. ./sbin/start-dfs.sh 开启NameNode 和 DataNode 守护进程报错

热门文章

  1. Deep Reinforcement Learning 深度增强学习资源
  2. 增强现实(Augmented Reality)浅谈
  3. 近邻取样插值和其速度优化
  4. python的设计模式之MVC模式
  5. Forefront Client Security部署及配置
  6. plotplayer声道设置原声
  7. 信息系统项目管理师案例分析
  8. Http协议中的Content-Length属性
  9. 【译】为什么这样宏定义#define INT_MIN (-2147483647 - 1)?
  10. 使用DOM4J读和写文档