1、初始化

- (instancetype)init API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)) NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable id)argument API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
- (instancetype)initWithBlock:(void (^)(void))block API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));

2、开启线程

+ (void)detachNewThreadWithBlock:(void (^)(void))block API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullable id)argument;
- (void)start API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
- (void)main API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); // thread body method

  特点:main

//执行start方法后会自动调用main方法。
//main是默认的初始化和调用selector的方法。如果要继承NSThread,可以重写main方法来执行新线程的主要部分。重写的mian方法不需要调用super。不要直接调用mian方法,而是通过start方法来调用。

3、停止线程

+ (void)sleepUntilDate:(NSDate *)date;//休眠到指定时间
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;//休眠多久
+ (void)exit;//退出所有线程
- (void)cancel API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));//取消线程

  特点:exit

//exit方法先执行currentThread类方法来获取当前线程。
//由于退出线程前给默认通知中心发送NSThreadWillExitNotification通知,并把当前线程作为参数,因为post通知是同时发送的,所以所有NSThreadWillExitNotification 通知的观察者都会收到通知,导致所有线程都退出。

4、描述线程状态

@property (readonly, getter=isExecuting) BOOL executing;//是否在执行
@property (readonly, getter=isFinished) BOOL finished ;//是否执行完毕
@property (readonly, getter=isCancelled) BOOL cancelled;//是否已经取消,此时finished可能为NO

5、主线程和多线程

@property (readonly) BOOL isMainThread ;//是否是主线程
@property (class, readonly, strong) NSThread *mainThread ;//获取当前主线程 + (BOOL)isMultiThreaded;//是否是多线程
@property (class, readonly, strong) NSThread *currentThread;//当前线程 1为主线程
@property (class, readonly, copy) NSArray<NSNumber *> *callStackReturnAddresses;//线程函数地址
@property (class, readonly, copy) NSArray<NSString *> *callStackSymbols;//当前线程的调用栈

6、属性设置

//可以使用返回的字典来保存线程的特定数据。这只是一个普通的字典,用来保存所有开发者感兴趣的数据。
@property (readonly, retain) NSMutableDictionary *threadDictionary;
//线程的堆内存大小字节数。必须是4KB的倍数。要使设置有用,必须在start方法调用前设置。
@property NSUInteger stackSize;
@property (nullable, copy) NSString *name;//线程名字

7、优先级

+ (double)threadPriority;//当前线程优先级【0.0--1.0】默认0.5
+ (BOOL)setThreadPriority:(double)p;//设置优先级成功返回YES @property double threadPriority API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); // To be deprecated; use qualityOfService below
@property NSQualityOfService qualityOfService API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)); // read-only after the thread is started
typedef NS_ENUM(NSInteger, NSQualityOfService) {
/* 最高优先级,主要用于提供交互UI的操作,比如处理点击事件,绘制图像到屏幕上 */
NSQualityOfServiceUserInteractive = 0x21,
/* 次高优先级,主要用于执行需要立即返回的任务 */
NSQualityOfServiceUserInitiated = 0x19,
/* 普通优先级,主要用于不需要立即返回的任务*/
NSQualityOfServiceUtility = 0x11,
/* 后台优先级,用于完全不紧急的任务*/
NSQualityOfServiceBackground = 0x09,
/* 默认优先级,当没有设置优先级的时候,线程默认优先级*/
NSQualityOfServiceDefault = -
} API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));

8、通知

FOUNDATION_EXPORT NSNotificationName const NSWillBecomeMultiThreadedNotification;//由当前线程派生出第一个其他线程时发送,一般一个线程只发送一次
FOUNDATION_EXPORT NSNotificationName const NSDidBecomeSingleThreadedNotification;//未知。
FOUNDATION_EXPORT NSNotificationName const NSThreadWillExitNotification;//当线程对象获取到exit消息时,广播这个通知。

9、NSThreadPerformAdditions类别

@interface NSObject (NSThreadPerformAdditions)

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array;//用于线程通信,子线程传到主线程
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;// 用于线程通信,子线程传到主线程,默认的运行时模式: kCFRunLoopCommonModes
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));//用于线程之间的通信
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));//用于线程之间的通信
- (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));// 隐式创建线程,默认的运行时模式 kCFRunLoopCommonModes @end

iOS开发线程之NSThread的更多相关文章

  1. iOS多线程之NSThread使用

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

  2. iOS多线程之NSThread详解

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

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

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

  4. ios 多线程之NSThread篇举例详解

    这篇博客是接着总篇iOS GCD NSOperation NSThread等多线程各种举例详解写的一个支篇.总篇也包含了此文的链接.本文讲解的知识点有NSThread的开始.取消.在当前线程执行任务. ...

  5. IOS多线程之NSThread

    参考:http://blog.csdn.net/totogo2010/article/details/8010231 1 简介 NSThread: 优点:NSThread 比其他两个轻量级 缺点:需要 ...

  6. iOS多线程之GCD小记

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

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

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

  8. 多线程之NSThread

    关于多线程会有一系列如下:多线程之概念解析 多线程之pthread, NSThread, NSOperation, GCD 多线程之NSThread 多线程之NSOperation 多线程之GCD一, ...

  9. iOS多线程之Thread

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

随机推荐

  1. 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍

    0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...

  2. 大转盘抽奖css3+js(简单书写)

    今天花了一段时间简单写了下抽奖大转盘,这里写的只是自己想到的简单的写了下(也希望收获其他想法),后续,再写的话会更新. 大体思路:页面加载完成后,通过监听开始按钮的点击事件.然后会根据产生的随机数,通 ...

  3. zookeeper3台机器集群环境的搭建

    三台机器zookeeper的集群环境搭建 Zookeeper 集群搭建指的是 ZooKeeper 分布式模式安装. 通常由 2n+1台 servers 组成. 这是因为为了保证 Leader 选举(基 ...

  4. nlp总结

    中科院nlpir和海量分词(http://www.hylanda.com/)是收费的. hanlp:推荐基于CRF的模型的实现~~要看语料,很多常用词会被分错,所以需要词库支撑.目前最友好的开源工具包 ...

  5. Java-Class-I:com.alibaba.fastjson.JSONObject

    ylbtech-Java-Class-I:com.alibaba.fastjson.JSONObject 1.返回顶部 1.1.import com.alibaba.fastjson.JSON;imp ...

  6. PAT_A1106#Lowest Price in Supply Chain

    Source: PAT A1106 Lowest Price in Supply Chain (25 分) Description: A supply chain is a network of re ...

  7. 推荐5本纯Java技术书,你看过几本?

    51小长假了,大家应该对它又爱又痛,爱的是终于可以到处浪了,痛的是没钱只能穷游,而且还到处都是人,结果变成了堵高速.去看人头.去蒸饺子,真是受罪啊.. 所以,对于小长假的痛,我相信还是有一部分人会选择 ...

  8. JAVA发展历史!

    前言 自1946年2月14日世界上首款计算机问世,第一代计算机语言“机器语言”便诞生了,它使用的是最原始的穿孔卡片,这种卡片上使用的语言只有专家才能理解,与人类语言差别极大.这种语言本质上是计算机能识 ...

  9. 3.4_springboot2.x整合spring Data Elasticsearch

    Spring Data Elasticsearch 是spring data对elasticsearch进行的封装. 这里有两种方式操作elasticsearch: 1.使用Elasticsearch ...

  10. python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程

    python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...