设为首页 加入收藏

TOP

iOS多线程之1.从Thread看多线程的生命周期
2017-10-12 18:00:53 】 浏览:6825
Tags:iOS 线程 Thread 生命 周期

??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);

 }

打印结果:

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

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

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS开发中的http浅析 下一篇React-Native 之 Touchable 介绍..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目