iOS多线程: pthread、NSThread
系列文章:
多线程
多线程 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相关推荐
- iOS多线程简单理解
1. 何为线程: 一个线程中任务的执行是串行的,同一时间内.一个线程只能执行一个任务. 线程是进程中的一条执行路径 2.何为多线程 一个进程中可以开启多条线程,多条线程可以并行(同时)执行不同的任务 ...
- iOS多线程:『pthread、NSThread』详尽总结
2019独角兽企业重金招聘Python工程师标准>>> 本文用来介绍 iOS 多线程中,pthread.NSThread 的使用方法及实现. 第一部分:pthread 的使用.其他相 ...
- iOS 多线程基础之 NSThread
前言 通常在 iOS 中,有三种比较常见的方式实现多线程,分别是 NSThread,GCD 和 NSOperation.本文主要介绍它们当中使用频率较低的 NSThread. 文章目录 前言 NSTh ...
- iOS多线程编程之NSThread的使用(★★★推荐,为原作者点赞★★★)
文章来源:http://blog.csdn.net/totogo2010/article/details/8010231 1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThre ...
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
2017-07-08 remember17 Cocoa开发者社区 目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 ...
- iOS 多线程的四种技术方案
iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) {for (NSInteger i = 0; i < 100 ...
- iOS多线程:『NSOperation、NSOperationQueue』详尽总结
2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...
- iOS多线程拾贝------操作巨人编程
iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...
- 多线程 循环 锁_大多数人还不清楚的iOS多线程
你不知道的的 iOS 多线程 程序员用有限的生命去追求无限的知识. 有言在先 首先我不是故意要做标题党的,也不是我要炒冷饭,我只是想换个姿势看多线程,本文大部分内容在分析如何造死锁,奈何功力尚浅,然而 ...
最新文章
- 【数据结构总结1】-数据结构的自述
- 电子书下载:The C# Programming Language, 4th Edition
- C#之获取本地IP地址
- HDU 4932 Miaomiao#39;s Geometry(推理)
- UVM入坑系列笔记(一)
- 微信测试公众号-jssdk基本配置和使用-thinkphp
- 千万不能返回局部变量的引用
- 纯干货内容:关于ivx和mendix的对比 还在犹豫选择那个低代码平台的小伙伴看过来
- 樱花FRP(SAKURA FRP)远程桌面+rdpwrap绕过限制
- (z)无杂散动态范围SFDR--影响通信机性能的因素
- Python源码保护
- 西数桌面云储存服务器,小白折腾NAS 篇九:超详细拆解小记 — Western Digital 西部数据 Elements 桌面硬盘12TB...
- 数据仓库多维数据模型设计
- 文字图片白底黑字_白底黑字简短文字图片 白底黑字纯简短文字
- 域名代购还需要关注到全方位宣传
- FLASH游戏制作精选实例教程
- 荣耀Magicbook14 BIOS更新无法开机
- C语言阿拉伯数字转大写汉字,人民币阿拉伯数字转换为汉字大写 code
- android6.0的root工具,安卓6.0怎么root?安卓6.0 root教程!
- 手把手教你搭建入门级免费私有云盘NAS——基于syncthing——基础篇(树莓派、PC机)
热门文章
- Android视频截图【转】
- Spring Boot工程在IDEA中运行报错
- GridView网格控件
- Cityengine, 3ds MAX, FME
- Nginx从入门到掌握【(第3节(共3节)】
- Android开发UI之GridLayout的使用
- Android View之用户界面...
- null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
- Revip MEP二次开发之“连接弯头”
- Hyper-V实战:高可用性-配置Hyper-V群集