系列文章:

多线程

多线程 pthread、NSThread

多线程 GCD

多线程 NSOperation

多线程运用

Pthreads

这是一套在很多操作系统上都通用的多线程API, 基于 c语言 的框架

#import <pthread.h>// 创建线程,并执行任务
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {pthread_t thread;//创建一个线程并自动执行pthread_create(&thread, NULL, start, NULL);
}void *start(void *data) {NSLog(@"%@", [NSThread currentThread]);return NULL;
}复制代码

打印输出

2015-07-27 23:57:21.689 testThread[10616:2644653] <NSThread: 0x7fbb48d33690>{number = 2, name = (null)}
复制代码

你需要手动处理线程的各个状态的转换即管理生命周期,比如,这段代码虽然创建了一个线程,但并没有销毁。

NSThread

这套方案是经过苹果封装后的,并且完全面向对象的。所以你可以直接操控线程对象,非常直观和方便。但是,它的生命周期还是需要我们手动管理,所以这套方案也是偶尔用用,比如 [NSThread currentThread],它可以获取当前线程类,你就可以知道当前线程的各种属性,用于调试十分方便。下面来看看它的一些用法。

创建并启动

  • 先创建线程类,再启动

OBJECTIVE-C

 // 创建NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:nil];// 启动 线程一启动,就会在线程thread中执行self的run方法[thread start];
复制代码

SWIFT

//创建let thread = NSThread(target: self, selector: "run:", object: nil)//启动thread.start()
复制代码
  • 创建并自动启动线程

OBJECTIVE-C

[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:nil];
复制代码

SWIFT

NSThread.detachNewThreadSelector("run:", toTarget: self, withObject: nil)
复制代码
  • 使用 NSObject 的方法创建(隐式创建)并自动启动线程

OBJECTIVE-C

  [self performSelectorInBackground:@selector(run:) withObject:nil];
复制代码

SWIFT

苹果认为 performSelector: 不安全,所以在 Swift 去掉了这个方法。 Note: The performSelector: method and related selector-invoking methods are not imported in Swift because they are inherently unsafe.

上述2种创建线程方式的优缺点

  • 优点:简单快捷
  • 缺点:无法对线程进行更详细的设置

其他方法

//取消线程
- (void)cancel;//启动线程
- (void)start;//判断某个线程的状态的属性
@property (readonly, getter=isExecuting) BOOL executing;
@property (readonly, getter=isFinished) BOOL finished;
@property (readonly, getter=isCancelled) BOOL cancelled;//设置和获取线程名字
-(void)setName:(NSString *)n;
-(NSString *)name;//获取当前线程信息
+ (NSThread *)currentThread;//获取主线程信息
+ (NSThread *)mainThread;// 是否为主线程(类方法)
+ (BOOL)isMainThread;// 是否为主线程(对象方法)
- (BOOL)isMainThread;//使当前线程暂停一段时间,或者暂停到某个时刻
+ (void)sleepForTimeInterval:(NSTimeInterval)time;
+ (void)sleepUntilDate:(NSDate *)date;// 强制停止线程-> 进入死亡状态
+ (void)exit;
//注意:一旦线程停止(死亡)了,就不能再次开启任务
复制代码

更详尽的博客:

iOS多线程:『pthread、NSThread』详尽总结

用来介绍 iOS 多线程中,pthread、NSThread 的使用方法及实现。

第一部分:pthread 的使用、其他相关方法。

第二部分:NSThread 的使用、线程相关用法、线程状态控制方法、线程之间的通信、线程安全和线程同步,以及线程的状态转换相关知识。

iOS多线程: pthread、NSThread相关推荐

  1. iOS多线程简单理解

    1. 何为线程: 一个线程中任务的执行是串行的,同一时间内.一个线程只能执行一个任务. 线程是进程中的一条执行路径 2.何为多线程 一个进程中可以开启多条线程,多条线程可以并行(同时)执行不同的任务 ...

  2. iOS多线程:『pthread、NSThread』详尽总结

    2019独角兽企业重金招聘Python工程师标准>>> 本文用来介绍 iOS 多线程中,pthread.NSThread 的使用方法及实现. 第一部分:pthread 的使用.其他相 ...

  3. iOS 多线程基础之 NSThread

    前言 通常在 iOS 中,有三种比较常见的方式实现多线程,分别是 NSThread,GCD 和 NSOperation.本文主要介绍它们当中使用频率较低的 NSThread. 文章目录 前言 NSTh ...

  4. iOS多线程编程之NSThread的使用(★★★推荐,为原作者点赞★★★)

    文章来源:http://blog.csdn.net/totogo2010/article/details/8010231 1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThre ...

  5. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)

    2017-07-08 remember17 Cocoa开发者社区 目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 ...

  6. iOS 多线程的四种技术方案

    iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) {for (NSInteger i = 0; i < 100 ...

  7. iOS多线程:『NSOperation、NSOperationQueue』详尽总结

    2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...

  8. iOS多线程拾贝------操作巨人编程

    iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...

  9. 多线程 循环 锁_大多数人还不清楚的iOS多线程

    你不知道的的 iOS 多线程 程序员用有限的生命去追求无限的知识. 有言在先 首先我不是故意要做标题党的,也不是我要炒冷饭,我只是想换个姿势看多线程,本文大部分内容在分析如何造死锁,奈何功力尚浅,然而 ...

最新文章

  1. 【数据结构总结1】-数据结构的自述
  2. 电子书下载:The C# Programming Language, 4th Edition
  3. C#之获取本地IP地址
  4. HDU 4932 Miaomiao#39;s Geometry(推理)
  5. UVM入坑系列笔记(一)
  6. 微信测试公众号-jssdk基本配置和使用-thinkphp
  7. 千万不能返回局部变量的引用
  8. 纯干货内容:关于ivx和mendix的对比 还在犹豫选择那个低代码平台的小伙伴看过来
  9. 樱花FRP(SAKURA FRP)远程桌面+rdpwrap绕过限制
  10. (z)无杂散动态范围SFDR--影响通信机性能的因素
  11. Python源码保护
  12. 西数桌面云储存服务器,小白折腾NAS 篇九:超详细拆解小记 — Western Digital 西部数据 Elements 桌面硬盘12TB...
  13. 数据仓库多维数据模型设计
  14. 文字图片白底黑字_白底黑字简短文字图片 白底黑字纯简短文字
  15. 域名代购还需要关注到全方位宣传
  16. FLASH游戏制作精选实例教程
  17. 荣耀Magicbook14 BIOS更新无法开机
  18. C语言阿拉伯数字转大写汉字,人民币阿拉伯数字转换为汉字大写 code
  19. android6.0的root工具,安卓6.0怎么root?安卓6.0 root教程!
  20. 手把手教你搭建入门级免费私有云盘NAS——基于syncthing——基础篇(树莓派、PC机)

热门文章

  1. Android视频截图【转】
  2. Spring Boot工程在IDEA中运行报错
  3. GridView网格控件
  4. Cityengine, 3ds MAX, FME
  5. Nginx从入门到掌握【(第3节(共3节)】
  6. Android开发UI之GridLayout的使用
  7. Android View之用户界面...
  8. null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
  9. Revip MEP二次开发之“连接弯头”
  10. Hyper-V实战:高可用性-配置Hyper-V群集