博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS多线程之1.从Thread看多线程的生命周期
阅读量:6603 次
发布时间:2019-06-24

本文共 1244 字,大约阅读时间需要 4 分钟。

  Thread 是多线程中最容易理解,但是使用起来又是最麻烦的一种多线程方法。为什么说容易理解呢?一个NSThread的对象就是一条线程。使用起来麻烦是因为,需要我们自己管理线程的生命周期:创建线程、调度任务、销毁线程。

首先我们开始创建线程:

​第一种方法:

NSThread *thread = [[NSThread alloc] initWithBlock:^{   //调度任务,例如下载图片,往服务器上传文件等一切耗费时间的操作​}];

​ 也可以用下面的方法:

- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable id)argument;id :消息发送的对象;selector:要传递的消息,消息就是我们要调度的任务。;argument:传递的参数,只能有一个,不过我们可以把多个参数封装成一个字典。

就这样一条线程就创建完成了。但是创建完一条线程,线程就会执行任务吗。当然不是,你得开启它,不然它是不会执行任务的。

[thread start];

线程销毁

  当子线程的任务执行完之后,子线程会自动退出。默认执行[NSThread exit]方法。当系统完成任务之后,会发送一个通知“NSThreadWillExitNotification”,我们可以添加观察者来监听线程的退出:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(threadfinishTask:) name:NSThreadWillExitNotification object:nil];  - (void)threadfinishTask:(NSNotification *)notification{ NSLog(@"threadfinishTask"); NSLog(@"%@",notification.userInfo); }

打印结果:

872567-20161104112701174-600955332.jpg
我们发现userInfo为空,证明没有什么通知信息。我们可以在这个方法写子线程完成之后的操作,与主线程通信。

  个人理解,如果想研究多线程编程还得从Thread开始。因为Thread逻辑并不复杂,封装的层级相对较低,我们要自己管理线程的生命周期、同步、加锁等问题,这会加深我们对多线程编程的理解,但是也会造成一定的性能开销。但用的时候应该多以Cocoa Operations和Grand Central Dispatch为主,尤其是Cocoa Operations,它更灵活,可以很轻易的处理复杂的情况。

   个人原创,欢迎转载。可以关注我的博客。我会定期分享一下iOS,开发方面的知识,大家有什么意见可以给我发私信。

转载于:https://www.cnblogs.com/doujiangyoutiao/p/6029603.html

你可能感兴趣的文章
FC FCoe Vsan Zone相关
查看>>
Oracle队列锁: Enqueue HW
查看>>
泪滴(teardrop)
查看>>
eaccelerator
查看>>
linux 远程gui管理 webmin
查看>>
CUDA学习(八十七)
查看>>
VR产业转移线下发力 移动VR体验馆落户北京国美
查看>>
mysql回收用户权限
查看>>
Android之Adapter用法总结
查看>>
Windows server 2012安装.NET 3.5
查看>>
使用C#的WebService实现客户端软件的更新
查看>>
GDB高级技巧
查看>>
shell基础:使用read、命令行脚本传参实现输入2个整数并计算
查看>>
事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)
查看>>
【iOS-Cocos2d游戏开发之十九】游戏数据存储的四种常用方式;
查看>>
如何查看已委派控制的用户及具体权限
查看>>
Kotlin从入门到放弃(四)——协程下
查看>>
You should be here !
查看>>
精品软件推荐 VMware Workstation Pro 12 中文版
查看>>
GEF:使用Draw2D画流程图-(上)
查看>>