iOS中多线程知识总结(一)
这一段开发中一直在处理iOS多线程的问题,但是感觉知识太散了,所以就把iOS中多线程的知识点总结了一下.
1.基本概念
1)什么是进程?进程的特性是什么?
进程是指在系统中正在运行的一个应用程序.
特性: 每个进程之间都是独立的,每个进程都运行在其专用而且受保护的内存空间内.
2)什么是线程?线程和进程的关系是什么?
一个进程要想执行任务,必须要有线程(每一个进程至少要有一个线程),线程是进程的基本单元,一个进程中的所有任务都是在线程中执行
关系: 进程包含线程
3)什么叫多线程?
一个进程中开启多条线程,每条线程可以并行执行不同的任务.例如: 同时执行多个下载任务时
4)什么是线程并行? 什么是线程串行? 线程并行原理是什么?
线程并行: 即同时执行多个线程
线程串行: 一个线程中任务的执行是串行的,也就是说,同一时间,一个线程只能执行一个任务
线程并行的原理: 在同一时间里,CPU只能处理一条线程,只有一条线程在工作.原理就是CPU在多条线程之间调度,如果CPU调度线程的时间足够的快,就造成了多线程并发执行的假象
5)使用多线程的优缺点
优点: 1)能适当提高程序的执行效率
2)能适当提高资源利用率
缺点: 1)开启线程需要占用一定的内存空间,如果开启大量线程的话,会占用大量的内存空间.降低程序的执行效率
2)线程越多,CPU在调度线程上的开销,越大
3)程序设计更加复杂,需要处理线程之间的通信,多线程的数据共享
6)什么是主线程?主线程的作用?
主线程: 一个iOS程序运行后,默认会开启一条线程,称为"主线程"或"UI线程"
作用: 刷新显示UI,处理UI事件
2.iOS中多线程的实现方案
iOS中多线程的实现方案有四种: (1)pthread(C中的,几乎不用) (2)NSThread(偶尔使用) (3)GCD(经常使用) (4)NSOperation(底层是GCD,但更面向对象)
1) pthread
这种开启线程的方式比较底层,在iOS开发中几乎不用,就不多介绍了
2) NSThread
(1)特点:
使用更加面向对象
简单易用,可直接操作线程对象
(2)声明周期:
由程序员进行管理
(3)NSThread四种创建方式
01.创建线程对象
//01 创建线程对象
/*
第一个参数:目标对象
第二个参数:方法选择器
第三个参数:传递给方法选择器中调用方法的参数
*/
//优点:能拿到线程对象 缺点:需要手动的启动线程
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"ios"];
//02 启动线程
[thread start];
02.创建线程
//方法二
//优点:自动启动线程 缺点:不能拿到线程对象
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:nil];
03.开启一条后台线程
//方法三 开启一条后台线程
//优点:自动启动线程 缺点:不能拿到线程对象
[self performSelectorInBackground:@selector(run:) withObject:@"后台线程"];
04.自定义创建线程
//方法四 自定义
NewThread *threadB = [[NewThread alloc]init];
[threadB start];
(4)设置NSThread的属性
设置属性比较常用的就是名称和优先级.设置名称可以通过它的name属性去设置,设置线程的优先级通过threadPriority 属性去设置.代码如下:
//设置名称
threadA.name = @"线程A"; //设置优先级 0~1.0 默认是0.5 最高是1.0
threadA.threadPriority = 1.0;
threadC.threadPriority = 0.01;
通过设置线程的优先级属性,可以实现让一个线程优先执行.
(5)控制线程的状态
//常用的控制线程状态的方法
[NSThread exit];//退出当前线程
[NSThread sleepForTimeInterval:2.0];//阻塞线程
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];//阻塞线程
GCD 和 NSOperation放到下篇再写.
iOS中多线程知识总结(一)的更多相关文章
- iOS中多线程知识总结(二)
1.GCD GCD全称是Grand Central Dispatch,译为"强大的中枢管理器" 1)什么是任务?什么是队列? 任务和队列是GCD的核心. 任务: 执行什么操作 队列 ...
- iOS中多线程原理与runloop介绍
一.线程概述 有些程序是一条直线,起点到终点:有些程序是一个圆,不断循环,直到将它切断.直线的如简单的Hello World,运行打印完,它的生命周期便结束了,像昙花一现那样:圆如操作系统,一直运行直 ...
- iOS 中多线程的简单使用
iOS中常用的多线程操作有( NSThread, NSOperation GCD ) 为了能更直观的展现多线程操作在SB中做如下的界面布局: 当点击下载的时候从网络上下载图片: - (void)loa ...
- IOS中多线程的总结
首先要知道线程和进程的区别.一个系统上运行的每一个应用程序都是一个线程.而进程中要执行的任务都是在线程上来实现的,所以说线程是进程的最小执行单元. 进程最少要有一个线程.多线程,顾名思义就是多条线程. ...
- iOS中多线程的实现方案
什么是主线程? 一个iOS程序运行后,默认会开启一条线程,称为“主线程”或“UI线程” 主线程的主要作用 1.显示/刷新UI界面 2.处理UI事件(比如点击事件,滚动事件,拖拽事件) 主线程的使用注意 ...
- iOS中多线程常用的知识点
1.pThread 跨平台的多线程技术 , 是IEEE制定的POSIX 表示可移植性操作系统接口的多线程计数,UNIX内核平台 Unix,Linux,Mac(小红帽) (windows上有可移 ...
- DELPHI中多线程知识【转】
本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以 ...
- java中多线程知识
参考:http://www.cnblogs.com/wxd0108/p/5479442. 引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只 ...
- ios中多线程GCD NSOperation NSThread 相关的操作解析
//1.GCD 继承自C语言 优点 简单方便 //开启一个子线程处理耗时的操作 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIO ...
随机推荐
- SilverLight抛出 System.InvalidOperationException: 超出了2083 的最大URI
在SilverLight中对于抛出 System.InvalidOperationException: 超出了 2083 的最大 URI 长度 的异常 处理 其实很简单 在 EntityFramewo ...
- c#接口与抽象类的区别
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...
- C++ 结构体数组回调C#代码,c#数组只有一条
C# 方法 [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall, CharSet = CharSet.Ansi)] public ...
- [Leetcode] Contains Duplicate III
Given an array of integers, find out whether there are two distinct indices i and j in the array suc ...
- vim 插件之 gist.vim 的安装
用 IntelliJ 的时觉得 create gist 很好用,查了下,发现 vim 下也有这个插件,于是马上配置上. 安装 下载 Gist.vim 解压后进入目录,拷贝文件 cp plugin/gi ...
- VB6+Winsock编写的websocket服务端
早就写好了,看这方面资料比较少,索性贴出来.只是一个DEMO中的,没有做优化,代码比较草.由于没地方上传附件,所以只把一些主要的代码贴出来. 这只是服务端,不过客户端可以反推出来,其实了解了webso ...
- hdu3549还是网络流
最后一次训练模板(比较熟练了) 接下来训练网络流的建图 #include <cstdio> #define INF 2147483647 int n,m,ans,x,y,z,M,h,t,T ...
- 如何在windows上编译Chromium (CEF3) 并加入MP3支持(二)
时隔一年,再次编译cef3,独一无二的目的仍为加入mp3支持.新版本的编译环境和注意事项都已经发生了变化,于是再记录一下. 一.编译版本 cef版本号格式为X.YYYY.A.gHHHHHHH X为主版 ...
- 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持
一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...
- [IOS]Swift 遍历预制的本地资源文件
我事先放了一堆svg文件,但是我是批量使用的,想要直接遍历他们加入到一个list中来,那我直接就遍历他们的名称,把他们的名字组成一个array. var ss:NSString = NSBundle. ...