首页 > 代码库 > iOS开发 - 多线程实现方案之Pthread篇
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():向线程发送一个信号
pthread_equal(): 对两个线程的线程标识号进行比较
pthread_detach(): 分离线程
pthread_self(): 查询线程自身线程标识号
iOS开发 - 多线程实现方案之Pthread篇
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。