多线程篇-NSThread-简单使用
创建的三种方式
第一种
- 介绍
/*alloc init 创建第一个参数:目标对象第二个参数:选择器,线程启动要调用哪个方法第三个参数:前面方法要接收的参数(最多只能接收一个参数,没有则传nil)*/ NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"子线程"];
- 使用
/*第一种方式创建*/ -(void)threadCreate1{NSLog(@"主线程-------%@",[NSThread currentThread]);//创建线程NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"子线程"];//开始执行线程[thread start];NSLog(@"主线程-------%@",[NSThread currentThread]); } /*线程执行方法*/ -(void)run:(id)obj{for (int i=0; i<3; i++) {NSLog(@"%@----%@",[NSThread currentThread],obj);} }
- 结果
第二种
- 介绍
/* 分离出一条子线程 第一个参数:线程启动调用的方法 第二个参数:目标对象 第三个参数:传递给调用方法的参数 */ [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是分离出来的子线程"];
- 使用
/*第二种方式创建*/ -(void)threadCreate2{NSLog(@"主线程-------%@",[NSThread currentThread]);//detachNewThreadSelector 会理解在后台执行selector方法[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是分离出来的子线程"];NSLog(@"主线程-------%@",[NSThread currentThread]); } /*线程执行方法 */ -(void)run:(id)obj{for (int i=0; i<3; i++) {NSLog(@"%@----%@",[NSThread currentThread],obj);} }
- 结果
第三种
- 介绍
//后台线程//第一个参数:线程启动调用的方法//第二个参数:传递给调用方法的参数//特点:自动启动线程 [self performSelectorInBackground:@selector(run:) withObject:@"我是后台线程"];
- 使用
/* 第三种方式创建 */ -(void)threadCreate3{NSLog(@"主线程-------%@",[NSThread currentThread]);//是NSObject分类的一个方法,意味着所有继承于NSObject的类都是用用此方法,并且在其他线程执行方法!//只要设定,那么它会立即在后台执行 selector 方法[self performSelectorInBackground:@selector(run:) withObject:@"后台线程"];NSLog(@"主线程-------%@",[NSThread currentThread]); } /* 线程执行方法 */ -(void)run:(id)obj{for (int i=0; i<3; i++) {NSLog(@"%@----%@",[NSThread currentThread],obj);} }
结果
线程的状态
介绍
objc //线程的各种状态:新建-就绪-运行-阻塞-死亡 //常用的控制线程状态的方法 [NSThread exit];//退出当前线程 [NSThread sleepForTimeInterval:2.0];//阻塞线程 [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];//阻塞线程 //注意:线程死了不能复生
- 使用
objc /* 状态 */ -(void)threadState{ NSLog(@"睡2 秒"); //为类方法,直接让线程睡眠两秒 [NSThread sleepForTimeInterval:2.0]; //分离出一个子线程 [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:nil]; } /* 线程执行方法 */ -(void)run:(id)obj{ for (int i=0; i<8; i++) { if(i==2){ NSLog(@"睡5秒"); //[NSDate dateWithTimeIntervalSinceNow:5.0] 从现在开始过了5秒 //睡到指定的日期, [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:5.0]]; } NSLog(@"%@----%d",[NSThread currentThread],i); //当线程满足一定的条件,可以强行停止 if (i==5) { //退出 [NSThread exit]; } } NSLog(@"这里是不能来的,因为在5的时候就退出了"); }
结果
扩展
####
一定不能在主线程执行 [NSThread exit] 如果一旦执行了那么程序则会终止掉
写到这才发现,忘记介绍线程中常用属性
//设置线程的属性 //设置线程的名称 thread.name = @"线程A";//设置线程的优先级,注意线程优先级的取值范围为0.0~1.0之间,1.0表示线程的优先级最高,如果不设置该值,那么理想状态下默认为0.5 thread.threadPriority = 1.0;
thread.name
是在一般比较大型的项目中比较常见的设置,因为大型项目中会有走很多线程,然而出现bug
,thread.name
能在短时间内查找thread.threadPriority
这个是设置优先级别,但是我建议还是不要去设置它,因为多线程开发:尽量简单点,不要太复杂,影响性能不说,有可能还把自己带晕,不值得,以上纯属个人建议。本章到此结束欢迎各位码友随意转载并指正
转载于:https://www.cnblogs.com/ljy-666/p/5125818.html
多线程篇-NSThread-简单使用相关推荐
- iOS开发多线程篇—自定义NSOperation
iOS开发多线程篇-自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...
- iOS开发多线程篇—线程的状态
iOS开发多线程篇-线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(te ...
- iOS开发多线程篇—多线程简介
iOS开发多线程篇-多线程简介 一.进程和线程 1.什么是进程 进程是指在系统中正在执行的一个应用程序 每一个进程之间是独立的.每一个进程均执行在其专用且受保护的内存空间内 比方同一时候打开QQ.Xc ...
- ocbase 数据库 蚂蚁_iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇-FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- python 多线程就这么简单(续)
python 多线程就这么简单(续) 之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的 ...
- 面试题汇总二 Java 多线程篇
前言 题目汇总来源 史上最全各类面试题汇总,没有之一,不接受反驳 面试题汇总一 Java 语言基础篇 面试题汇总二 Java 多线程篇 面试题汇总三 Java 集合篇 面试题汇总四 JVM 篇 面试题 ...
- 从入门到实战,Netty多线程篇案例集锦
从入门到实战,Netty多线程篇案例集锦 原创 2015-09-10 李林峰 InfoQ Netty案例集锦系列文章介绍 1|Netty的特点 Netty入门比较简单,主要原因有如下几点: Netty ...
- 明翰Java教学系列之多线程篇V0.2(持续更新)
文章目录 传送门 前言 背景知识 并行与并发 线程与进程 内存模型 1. 计算机内存模型 `2. Java内存模型` 2.1 内存交互 2.1.1 交互操作 2.1.2 交互规则 `2.2 并发编程特 ...
- 【Java实习生面试题系列】-- 多线程篇四
文章目录 1. 说下对同步器 AQS 的理解? 2. AQS 的原理是什么? 3. AQS 底层使用了模板方法模式,你能说出几个需要重写的方法吗? 4. 说下对 Semaphore.CountDown ...
- iOS开发UI篇—UIWindow简单介绍
iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...
最新文章
- laravel 如何自定义全局的方法/类
- mysql 性能和安全性_从源码解读Mysql 5.7性能和数据安全性的提升
- 简述推荐系统中的矩阵分解
- jcmd:JDK14中的调试神器
- mysql substr 中文字符_解析使用substr截取UTF-8中文字符串出现乱码的问题
- 依赖注入(di)模式_Java依赖注入– DI设计模式示例教程
- “清华同方同传”By软件:同方易教管理平台 V2.4
- php连接mysql MariaDB_PHP+MariaDB数据库操作基本技巧
- Power Query M语言全部list函数,快速分类掌握
- Matlab OpenEXR 打开exr格式图片
- CF 949 D Curfew —— 二分答案
- LaTeX 相对于 Word 有什么优势?
- CC2540/CC2541/CC254x之OSAL操作系统抽象层
- 达人评测锐龙r7 5800h和酷睿i7 12650h选哪个好
- aws mysql 费用_AWS 免费一年套餐详解
- Android 集成Xposed框架
- 目标检测中anchor的概念
- 找出相似的图片--C#
- 小厂B端产品啥都干——B端表格设计入门指南(上)
- Kafka 生产者数据安全(ACK机制,ACK时机,ACK应答机制,故障处理,Exactly Once)
热门文章
- 软件集成策略故事连载----对项目的不利影响竟然这么大
- Mysql 数据库水平分表 存储过程
- 亚马逊低调收购Biba 或下月发布视频消息服务
- 微软老兵 Antoine LeBlond 将正式离职
- 只用2000行代码实现google protocol buffer c++版的功能
- 37signals为何砍掉中层?个人点评,高素质人才队伍工作,靠的是全体发挥综合能力,而不是靠......
- 修复远程过程调用 (RPC) 时发生的各种问题KB908521
- 为什么每个人都应该尝试Ubuntu下篇 Why Everyone Should Try Ubuntu 分享
- 网络爬虫--15.【糗事百科实战】多线程实现
- 学成在线--18.新增课程(课程分类查询)