iOS开发多线程篇—线程的状态
iOS开发多线程篇—线程的状态
一、简单介绍
线程的创建:
self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
说明:创建线程有多种方式,这里不做过多的介绍。
线程的开启:
[self.thread start];
线程的运行和阻塞:
(1)设置线程阻塞1,阻塞2秒
[NSThread sleepForTimeInterval:2.0];
(2)第二种设置线程阻塞2,以当前时间为基准阻塞4秒
NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
[NSThread sleepUntilDate:date];
线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)
线程的死亡:
当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。
线程死亡后,线程对象从内存中移除。
二、代码示例
代码示例1:
1 //2 // YYViewController.m3 // 04-NSThread02-线程的状态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 @property(nonatomic,strong)NSThread *thread; 13 14 @end 15 16 @implementation YYViewController 17 18 - (void)viewDidLoad 19 { 20 [super viewDidLoad]; 21 22 //创建线程 23 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 24 //设置线程的名称 25 [self.thread setName:@"线程A"]; 26 } 27 //当手指按下的时候,开启线程 28 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 29 { 30 //开启线程 31 [self.thread start]; 32 } 33 34 -(void)test 35 { 36 //获取线程 37 NSThread *current=[NSThread currentThread]; 38 NSLog(@"test---打印线程---%@",self.thread.name); 39 NSLog(@"test---线程开始---%@",current.name); 40 41 //设置线程阻塞1,阻塞2秒 42 NSLog(@"接下来,线程阻塞2秒"); 43 [NSThread sleepForTimeInterval:2.0]; 44 45 //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 46 NSLog(@"接下来,线程阻塞4秒"); 47 NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0]; 48 [NSThread sleepUntilDate:date]; 49 for (int i=0; i<20; i++) { 50 NSLog(@"线程--%d--%@",i,current.name); 51 52 } 53 NSLog(@"test---线程结束---%@",current.name); 54 } 55 56 @end
打印查看:
代码示例2(退出线程):
1 //2 // YYViewController.m3 // 04-NSThread02-线程的状态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 @property(nonatomic,strong)NSThread *thread; 13 14 @end 15 16 @implementation YYViewController 17 18 - (void)viewDidLoad 19 { 20 [super viewDidLoad]; 21 22 //创建线程 23 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 24 //设置线程的名称 25 [self.thread setName:@"线程A"]; 26 } 27 //当手指按下的时候,开启线程 28 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 29 { 30 //开启线程 31 [self.thread start]; 32 } 33 34 -(void)test 35 { 36 //获取线程 37 NSThread *current=[NSThread currentThread]; 38 NSLog(@"test---打印线程---%@",self.thread.name); 39 NSLog(@"test---线程开始---%@",current.name); 40 41 //设置线程阻塞1,阻塞2秒 42 NSLog(@"接下来,线程阻塞2秒"); 43 [NSThread sleepForTimeInterval:2.0]; 44 45 //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 46 NSLog(@"接下来,线程阻塞4秒"); 47 NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0]; 48 [NSThread sleepUntilDate:date]; 49 for (int i=0; i<20; i++) { 50 NSLog(@"线程--%d--%@",i,current.name); 51 if (5==i) { 52 //结束线程 53 [NSThread exit]; 54 } 55 56 } 57 NSLog(@"test---线程结束---%@",current.name); 58 } 59 60 @end
打印示例:
注意:人死不能复生,线程死了也不能复生(重新开启),如果在线程死亡之后,再次点击屏幕尝试重新开启线程,则程序会挂。
转载于:https://www.cnblogs.com/sunflower-lhb/p/4914893.html
iOS开发多线程篇—线程的状态相关推荐
- iOS开发多线程篇—线程安全
一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数 ...
- iOS开发多线程篇—多线程简介
iOS开发多线程篇-多线程简介 一.进程和线程 1.什么是进程 进程是指在系统中正在执行的一个应用程序 每一个进程之间是独立的.每一个进程均执行在其专用且受保护的内存空间内 比方同一时候打开QQ.Xc ...
- iOS开发多线程篇—自定义NSOperation
iOS开发多线程篇-自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...
- iOS开发——高级篇——线程同步、线程依赖、线程组
前言 对于iOS开发中的网络请求模块,AFNet的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?本篇文章涉及线程同步.线程依赖.线程组等专用名词的含义,若对上述名词认识模糊,可先进行查 ...
- iOS开发多线程篇—多线程简单介绍
一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过& ...
- iOS开发——多线程篇——GCD
一.基本概念 1.简介 什么是GCD 全称是Grand Central Dispatch,可译为"牛逼的中枢调度器" 纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公 ...
- ios开发多线程篇--异步加载网络图片GCD
一.异步加载网络图片 1.ATS (1)简介 从iOS9.0开始,如果按照以前的方式写代码,在访问网络的时候 ,会报以下警告信息: App Transport Security has blocked ...
- iOS开发网络篇—多线程断点下载
iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...
- android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...
先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...
最新文章
- ctypes python3_聊聊Python ctypes 模块
- printf打印是字体和背景带颜色的输出的方法
- 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(7)--- 事件处理模式与反应器...
- mysql的连接leftjion,mysql的表连接(left|right)join
- 我该如何学习spring源码以及解析bean定义的注册
- java connection 共享_java 使用HttpURLConnection发送数据简单实例
- 浅析透雾监控镜头的四大透雾技术
- haar级联分类器--人脸检测和匹配
- Python练习-内置函数的应用
- Qt一个进程运行另一个进程
- 重庆理工大学图像处理实验三:图像分割
- win10无法装载iso文件_win10系统解决方案无法打开iso文件
- 如何写软件概要设计?
- autocad怎么用计算机,职称计算机AutoCAD实用技巧
- 简历是html的怎么改成word文档,excel简历怎样转换为word文档
- 加薪不如发奖金? 穆穆-movno1
- PaddlePaddle tutorial Ⅰ——Multiple linear regression
- JavaScript 复制粘贴技巧
- Module-Huey任务队列
- 备战专升本的日常0918-1010