iOS开发 - 多线程实现方案之Pthread篇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发 - 多线程实现方案之Pthread篇相关的知识,希望对你有一定的参考价值。
pthread基础
pthread是POSIX thread的简写,一套通用的多线程API,适用于Unix、Linux、Windows等系统,跨平台、可移植,使用难度大,C语言框架,线程生命周期由程序员管理,百度百科上有详细的介绍,去查看,由于ios开发几乎用不到,以下就简单运用pthread开启一个子线程,用来处理耗时操作
pthread创建子线程步骤
1.导入头文件
#import <pthread.h>
2.pthread创建子线程
- (void)viewDidLoad { [super viewDidLoad]; /** 说明: 1.在c语言中,没有对象的概念,对象类型是以-t/Ref结尾的; 2.c语言中的void * 和OC的id是等价的; 3.在混合开发时,如果在 C 和 OC 之间传递数据,需要使用 __bridge 进行桥接,桥接的目的就是为了告诉编译器如何管理内存,MRC 中不需要使用桥接; 4.在 OC 中,如果是 ARC 开发,编译器会在编译时,根据代码结构, 自动添加 retain/release/autorelease。但是,ARC 只负责管理 OC 部分的内存管理,而不负责 C 语言 代码的内存管理。因此,开发过程中,如果使用的 C 语言框架出现retain/create/copy/new 等字样的函数,大多都需要 release,否则会出现内存泄漏 */ //1.创建线程对象 pthread_t thread; //2.创建线程 NSString *param = @"参数"; int result = pthread_create(&thread, NULL, task, (__bridge void *)(param)); result == 0?NSLog(@"success"):NSLog(@"failure"); //3.设置子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源,或者在子线程中添加 pthread_detach(pthread_self()),其中pthread_self()是获得线程自身的id
pthread_detach(thread); /** pthread_create(<#pthread_t _Nullable *restrict _Nonnull#>, <#const pthread_attr_t *restrict _Nullable#>, <#void * _Nullable (* _Nonnull)(void * _Nullable)#>, <#void *restrict _Nullable#>) 参数: 1.指向线程标识符的指针,C 语言中类型的结尾通常 _t/Ref,而且不需要使用 *; 2.用来设置线程属性; 3.指向函数的指针,传入函数名(函数的地址),线程要执行的函数/任务; 4.运行函数的参数; */ } /** void * (*) (void *) 返回值 函数名 函数参数 */ void *task(void * param){ //在此做耗时操作 NSLog(@"new thread : %@ 参数是: %@",[NSThread currentThread],(__bridge NSString *)(param)); return NULL; }
其他相关函数
pthread_t:线程ID
pthread_attr_t:线程属性
pthread_create():创建一个线程
pthread_exit():终止当前线程
pthread_cancel():中断另外一个线程的运行
pthread_join():阻塞当前的线程,直到另外一个线程运行结束
pthread_attr_init():初始化线程的属性
pthread_attr_setdetachstate():设置脱离状态的属性(决定这个线程在终止时是否可以被结合)
pthread_attr_getdetachstate():获取脱离状态的属性
pthread_attr_destroy():删除线程的属性
pthread_kill():向线程发送一个信号
以上是关于iOS开发 - 多线程实现方案之Pthread篇的主要内容,如果未能解决你的问题,请参考以下文章