ios开发多线程篇——线程的状态
来源:互联网 发布:淘宝男装冬装 编辑:程序博客网 时间:2024/05/16 23:58
一.简单介绍
线程的创建:
self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
说明:创建线程有多种方式,这里不做过多的介绍。
线程的开启:
[self.thread start];
线程的运行和阻塞:
(1)第一种设置线程阻塞,阻塞2秒
[NSThread sleepForTimeInterval:2.0];
(2)第二种设置线程阻塞,以当前时间为基准阻塞4秒
NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
[NSThread sleepUntilDate:date];
线程的死亡:
当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。
线程死亡后,线程对象从内存中移除。
二.代码示例
示例1
#import "ViewController.h"@interface ViewController ()@property(nonatomic,strong) NSThread *thread;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //创建线程 self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(test) object:nil]; //设置线程的名字 self.thread.name = @"线程A";}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //开启线程 [self.thread start];}- (void)test{ //获取线程 NSThread *current = [NSThread currentThread]; NSLog(@"test---打印线程---%@",self.thread.name); NSLog(@"test---线程开始---%@",current.name); //第一种设置线程阻塞,阻塞2秒 NSLog(@"接下来,线程阻塞2秒"); [NSThread sleepForTimeInterval:2.0]; //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 NSLog(@"接下来,线程阻塞4秒"); NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0]; [NSThread sleepUntilDate:date]; for (int i=0; i<20; i++) { NSLog(@"线程--%d--%@",i,current.name); } NSLog(@"test---线程结束---%@",current.name);}@end
示例2(退出线程)
#import "ViewController.h"@interface ViewController ()@property(nonatomic,strong) NSThread *thread;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //创建线程 self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(test) object:nil]; //设置线程的名字 self.thread.name = @"线程A";}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //开启线程 [self.thread start];}- (void)test{ //获取线程 NSThread *current = [NSThread currentThread]; NSLog(@"test---打印线程---%@",self.thread.name); NSLog(@"test---线程开始---%@",current.name); //第一种设置线程阻塞,阻塞2秒 NSLog(@"接下来,线程阻塞2秒"); [NSThread sleepForTimeInterval:2.0]; //第二种设置线程阻塞2,以当前时间为基准阻塞4秒 NSLog(@"接下来,线程阻塞4秒"); NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0]; [NSThread sleepUntilDate:date]; for (int i=0; i<20; i++) { NSLog(@"线程--%d--%@",i,current.name); if (i == 5) { //结束线程 [NSThread exit]; } } NSLog(@"test---线程结束---%@",current.name);}@end
注意:人死不能复生,线程死了也不能复生(重新开启),如果在线程死亡之后,再次点击屏幕尝试重新开启线程,则程序会挂。
0 0
- ios开发多线程篇——线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—NSThread及线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程篇—线程的状态
- iOS开发多线程—06线程的状态
- iOS开发多线程-线程的状态
- iOS 多线程篇6—线程的状态
- iOS多线程-------线程的状态
- iOS开发多线程篇—创建线程
- iOS开发多线程篇—线程安全
- iOS开发多线程篇—创建线程
- iOS开发多线程篇—线程安全
- iOS开发多线程篇—创建线程
- BigDecimal加减乘除运算
- EditText点击不弹出系统键盘,显示光标
- Mac下忘记MySQL初始密码导致Navicat连接失败的解决方法
- Linux下rar和unrar命令的安装使用
- Android Studio 2.0和Android Studio 2.1 Beta 3下载分享
- ios开发多线程篇——线程的状态
- Phoenix+HBase使用心得
- java学习笔记2
- iOS获取屏幕亮度和调整屏幕亮度的方法
- Java面试题之精选最常见的面试真题 上
- iOS开发 ☞ Commen Sense
- block没那么难(二):block和变量的内存管理
- 关于Andrdoid编程中出现BufferQueue的“queueBuffer: fence is NULL”的一种解决方案
- Android Scrollview 内部组件android:layout_height="match_parent"无效的解决办法