一、PThread介绍
pthread是POSIX thread的简写,一套通用的多线程API,适用于Unix、Linux、Windows等系统,跨平台、可移植,使用难度大,C语言框架,线程生命周期由程序员管理,iOS开发实际中很少使用。
二、PThread使用
#import "ViewController.h"
#import <pthread.h>
@interface ViewController ()
@end
@implementation ViewController
- (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,否则会出现内存泄漏
*/
NSLog(@"%@ ", [NSThread currentThread]);
//1.创建线程对象
pthread_t thread;
//2.创建线程
/**
参数1:线程标识符的地址;
参数2:线程的属性;
参数3:函数指针(指向子进程中需要执行的函数);
参数4:传递给子进程的参数;
*/
NSString *param = @"参数";
int result = pthread_create(&thread, NULL, longTimeOperation, (__bridge void *)(param));
if (result == 0) {
NSLog(@"创建线程 OK");
} else {
NSLog(@"创建线程失败 %d", result);
}
pthread_detach(thread);
}
//函数
void *longTimeOperation(void *param){
NSString *str = (__bridge NSString *)(param);
NSLog(@"%@ - %@", [NSThread currentThread], str);
return NULL;
}
打印结果: