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. Codeforces Round #327 (Div. 2) B. Rebranding C. Median Smoothing

    B. Rebranding The name of one small but proud corporation consists of n lowercase English letters. T ...

  2. iOS开发之使用CocoaPods更新第三方出现“target overrides the `OTHER_LDFLAGS`……”问题解决方案

    今天在自己的项目中用CocoaPods引入第三方SDWebImage的时候,出现了问题.当更新完毕后,在终端没太注意这个问题的提示,就直接使用SDWebImage了,在使用的时候一些方法的提示和头文件 ...

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

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

  4. IntelliJ IDEA上创建maven Spring MVC项目

    IntelliJ IDEA上创建Maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...

  5. servlet中用注解的方式读取web.xml中的配置信息

    在学习servletContext的时候,我们知道了可以在web.xml中通过<context-param>标签来定义全局的属性(所有servlet都能读取的信息),并在servlet中通 ...

  6. 将文本文件的内容存储在DataSet中的方法总结

    项目中比较多的会对文件进行操作,例如文件的上传下载,文件的压缩和解压等IO操作.在.NET项目中较多的会使用DataSet,DataTable进行数据的缓存. 项目中对文本文件的操作比较简单,但是如果 ...

  7. App Widget简单应用

    首先后台进程创建一个PendingIntent对象,其中PendingIntent中包含一个真正的Intent,创建完成后将此PendingIntent对象交给桌面控件所在的进程,当用户点击桌面控件或 ...

  8. 代码的坏味道(3)——基本类型偏执(Primitive Obsession)

    坏味道--基本类型偏执(Primitive Obsession) 特征 使用基本类型而不是小对象来实现简单任务(例如货币.范围.电话号码字符串等). 使用常量编码信息(例如一个用于引用管理员权限的常量 ...

  9. RegQueryValueEx正确使用方法

    项目中需要读取注册表中的HKEY_CLASSES_ROOT主键下一个子键的值,看了看MSDN的说明,有RegOpenKeyEx和RegQueryValueEx两个函数可以用.也没仔细阅读函数说明,就写 ...

  10. 分享一个UI与业务逻辑分层的框架(一)

    序言 .NET(C#)的WinForm如何简单易行地进行UI与业务逻辑分层?本系列文章介绍一个WinForm分层框架,该框架针对WinForm中的TextBox,CheckBox,RadioButto ...