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多线程之1.从Thread看多线程的生命周期的更多相关文章

  1. iOS多线程之Thread

    多线程 • Thread 是苹果官方提供的,简单已用,可以直接操作线程对象.不过需要程序员自己管理线程的生命周期,主要是创建那部分 优缺点 面向对象,简单易用 直接操作线程对象 需要自己管理线程生命周 ...

  2. iOS多线程之8.NSOPeration的其他用法

      本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

  3. iOS多线程之GCD小记

    iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...

  4. Thread之一:线程生命周期及五种状态

    <Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较 ...

  5. Java多线程之Runnable与Thread

    Java多线程之Thread与Runnable 一.Thread VS Runnable 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类和 ...

  6. iOS多线程之NSThread使用

    iOS中的多线程技术 我们在iOS开发项目过程中,为了解决UI界面操作不被耗时操作阻塞,我们会使用到多线程技术.在iOS开发中,我们主要会用到三种多线程操作技术:NSThread,NSOperatio ...

  7. iOS多线程之NSThread详解

    在iOS中每个进程启动后都会建立一个主线程(UI线程),这个线程是其他线程的父线程.由于iOS中除了主线程,其他子线程是独立于Cocoa Touch的,所以只有主线程可以更新UI界面.iOS多线程的使 ...

  8. 【原】iOS多线程之NSThread、NSOperationQueue、NSObject和GCD的区别

    区别: Thread: 是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限. ...

  9. iOS多线程之7.NSOperation的初识

    NSOperation和GCD一样,不用我们管理线程的生命周期,加锁等问题,只要把操作封装进NSOperation中,系统会自动帮我们创建线程,执行操作.而且他是面向对象的,我们看起来更容易理解,使用 ...

随机推荐

  1. 使用karma测试平时写的小demo(arguments为例)

    有人说前端自动化测试非常困难,我觉得确实如此.在项目中,我个人也不放心写的测试,还是要手动测试.但是我们平时写demo学习时,完全可以使用自动化测试. 传统demo 1,新建一个html 2,写入js ...

  2. PHP关于web页面交互内容

    学php学了有一段时间了总结总结给大家分享一下 PHP中的引用 第一段程序: <?php $first_name="firstName"; $first=&$firs ...

  3. Machine Learning

    Recently, I am studying Maching Learning which is our course. My English is not good but this course ...

  4. Oracle配置数据库诊断

    环境:RHEL 6.4 + Oracle 11.2.0.4 1. 设置ADR 2. 使用Support Workbench 3. 恢复块介质 Reference 1. 设置ADR 1.1 查看v$di ...

  5. 2.Java基础之Runtime对象

    毕向东老师Java基础学习笔记——Runtime对象 今天学习Java中的Runtime对象后,感觉这个对象对我们主要有以下几点用处. 1.使用java代码打开本地可执行文件,比如打开一个计算器. 2 ...

  6. CentOS6.5网络设置

    CentOS6.5网络设置 不知道哪里做错了,长时间无法连接网络,百度了各种还是不可以.最后自己提取了以前可以联网的配置粘贴过来,成功.配置文件内容如下: vim /etc/resolv.conf 1 ...

  7. AJAX 详解注释很全来自互联网

    1: //用户名校验的方法 2: //这个方法使用XMLHTTPRequest对象进行AJAX的异步数据交互 3: var xmlhttp; 4: function verify(){ 5: //1. ...

  8. 一个简单得不能再简单的“ORM”了

    本文适合初学者,老鸟请点赞即走,谢谢. 文字功底有限,表述不恰当的地方,请各位多多包涵. 一,核心 现在ORM已经很多了,功能也齐全了,大家说我这是干无聊的事,造的连车轮子都还不算,反正我就当学习. ...

  9. C#不对称加密

    对称加密的缺点是双方使用相同的密钥和IV进行加密.解密.由于接收方必须知道密钥和IV才能解密数据,因此发送方需要先将密钥和IV传递给接收方.这就 有一个问题,如果攻击者截获了密钥和IV,也就等于知道了 ...

  10. 使用KMP算法判断是否为旋转词

    假设有两个字符串A.B,要判断它们是否为旋转词,只需构造一个"A+A"字符串,再与B比较,若B为A的旋转词,则使用KMP算法是可以得到结果的 代码如下: import java.u ...