多线程(一) NSThread
OS中多线程的实现方案:
技术 | 语言 | 线程生命周期 | 使用频率 |
pthread | C | 程序员自行管理 | 几乎不用 |
NSthread | OC | 程序员自行管理 | 偶尔使用 |
GCD | C | 自动管理 | 经常使用 |
NSOperation | OC | 自动管理 | 经常使用 |
线程的状态
NSThread的创建方式:
1
2
3
4
5
6
7
8
9
10
11
12
|
//创建线程方式一 NSThread *threadOne = [[ NSThread alloc] initWithTarget: self selector: @selector (testAction) object: nil ]; //给线程命名 threadOne.name = @ "threadOne" ; //启动线程,在新开的线程执行testAction方法 [threadOne start]; //创建线程方式二,并且会自动启动 [ NSThread detachNewThreadSelector: @selector (testAction) toTarget: self withObject: nil ]; //创建线程方式三,隐式创建方式,自动启动 [ self performSelectorInBackground: @selector (testAction) withObject: nil ]; |
调用的方法
1
2
3
4
5
6
7
|
- ( void )testAction { for ( int i = 0; i < 3; i++) { NSLog (@ "i = %d,当前线程 = %@" ,i,[ NSThread currentThread]); } } |
结果:可以看到有3条线程并发执行
线程的属性:
1
2
3
4
5
6
|
//创建一个线程 NSThread * thread = [[ NSThread alloc] initWithTarget: self selector: @selector (testAction) object: nil ]; //线程名字 thread .name = @ "wl" ; //线程优先级,一般情况不设置,默认0.5,数值范围0-1,数值越大优先级越高 thread .threadPriority = 0.5; |
常用方法,这些都是类方法,相对于这段代码所在的线程进行操作
1
2
3
4
5
6
7
8
9
10
11
12
|
//获得主线程 [ NSThread mainThread]; //判断是否为主线程,返回一个BOOL值 BOOL isMainThread = [ NSThread isMainThread]; //判断是否为多线程,返回一个BOOL值 BOOL isMultiThreaded = [ NSThread isMultiThreaded]; //把线程从可调度线程池中移除2s(阻塞线程) [ NSThread sleepForTimeInterval:2]; //把线程从可调度线程池中移除直到一个时间点(阻塞线程) [ NSThread sleepUntilDate:[ NSDate dateWithTimeIntervalSinceNow:2]]; //停止线程,线程死亡,这个线程就已经不存在了 [ NSThread exit]; |
多线程(一) NSThread的更多相关文章
- iOS开发之多线程(NSThread、NSOperation、GCD)
整理一些多线程相关的知识. 并行 & 并发 1.并行:并行是相对于多核而言的,几个任务同时执行.2.并发:并发是相对于单核而言的,几个任务之间快速切换运行,看起来像是"同时" ...
- iOS开发——多线程篇——NSThread
一.基本使用1.创建和启动线程一个NSThread对象就代表一条线程 创建.启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self s ...
- 多线程技术 NSThread & NSOperation & GCD
多线程:在iOS开发中,用到多线程的处理问题的时候有很多,比如异步下载数据时刷新界面等等. 引入多线程来处理问题的关键就是,基于多线程可以使界面更加流畅,防止界面假死. 界面假死:比如你单击一个按钮来 ...
- iOS的三种多线程技术NSThread/NSOperation/GCD
1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的"并发"技术,使得程序员可以不再去关心 ...
- 多线程&NSObject&NSThread&NSOperation&GCD
1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 2.NSOperation/NS ...
- iOS多线程开发--NSThread NSOperation GCD
多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势 ...
- 多线程(NSThread、NSOperation、GCD)编程浅谈
一.基本概念 进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动.可以理解成一个运行中的应用程序.线程:程序执行流的最小单元,线程是进程中的一个实体.同步:只能在当前线程按先后顺序依次执行 ...
- iOS之多线程开发NSThread、NSOperation、GCD
原文出处: 容芳志的博客 欢迎分享原创到伯乐头条 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Centr ...
- Ios开发之多线程编程——NSThread
IOS程序在运行的时候是通过主线程来进行UI视图的更新和响应屏幕触摸事件,但是,在视图更新的时候,会有一些非常耗时的工作,这样我们会出现系统出现卡顿的现象,这是因为主线程堵塞造成的,这样会使用户体验非 ...
- IOS开发 多线程编程 - NSThread
每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...
随机推荐
- 利用iptables的NAT代理实现内网访问外网
利用NAT代理实现内网访问外网 背景及原理 若局域网中的两台计算机只能有一台能够访问外网,而这两台计算机之间能相互通信,那么可以配置能访问外网的那台服务器实现路由器的功能,即实现其他机器的NAT转换, ...
- Github css加载失败,样式混乱解决办法
github被墙的解决办法 Github css加载失败,样式混乱解决办法 打开cmd,输入 nslookup github.com 8.8.8.8 ,下面就会显示出github的服务器地址列 ...
- C# 读取Excel中的数据
#region 读取Excel中的数据 /// <summary> /// 读取Excel中的数据 /// </summary> /// <param name=&quo ...
- UNP学习笔记(第二十六章 线程)
线程有时称为轻权进程(lightweight process) 同一进程内的所有线程共享相同的全局内存.这使得线程之间易于共享信息,然后这样也会带来同步的问题 同一进程内的所有线程处理共享全局变量外还 ...
- 如何在VS2010中添加ActiveX控件及使用方法
方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...
- centos7 安装rocketmq(quick start)
Quick Start This quick start guide is a detailed instruction of setting up RocketMQ messaging system ...
- 我如何添加一个空目录到Git仓库?
新建了一个仓库,只是创建一些目录结构,还不里面放什么,要放的内容还没有,还不存在,应该怎么办呢? Git 是不跟踪空目录的,所以需要跟踪那么就需要添加文件! 也就是说 Git 中不存在真正意义上的空目 ...
- Web Service之Soap请求响应内容中文编码解密
java模拟Soap请求测试Web Service接口,发现Web Service响应内容中的中文竟然是编码格式.比如: 中文:退保成功 Soap中文编码:退保成功 我仔细分析后发现,退编码实际上 ...
- (七)jQuery中的DOM操作
一.jQuery的DOM操作 (1)查找节点: 查找元素节点: 1. 获取指定的标签节点 $(“上级标签 标签:eq(“标签索引”) ; 如:var li = $("ul li:eq(2) ...
- java.lang.UnsupportedClassVersionError: Unsupported major.minor version 49.0的错误 [转]
一:要解决的问题 我们在尝鲜 JDK1.5 的时候,相信不少人遇到过 Unsupported major.minor version 49.0 错误,当时定会茫然不知所措.因为刚开始那会儿,网上与此相 ...