pthread
pthread基本知识
- 实现多线程的技术方案之一.
-
pthread
是POSIX thread
的简写.表示跨平台的线程接口. - 多线程的开发框架,由于是跨平台的C语言框架,在苹果的头文件中并没有详细的注释.
- 要查阅
pthread
有关资料,可以访问http://baike.baidu.com
- PS : 学习新知识必备
http://baike.baidu.com
&苹果官方文档
- 学习目的 : 学会如何学习新的框架.
pthread创建子线程步骤
导入头文件
#import <pthread.h>
pthread创建子线程要使用的函数
int pthread_create(pthread_t * __restrict, const pthread_attr_t * __restrict,
void *(*)(void *), void * __restrict);
-
参数:
- 参数1 : 指向线程标示符的指针(标示符地址).
- 参数2 : 线程属性.
- 参数3 : 指向新线程的指针(新线程的函数名/新线程入口).
- 参数4 : 线程参数.
-
返回值:
- 返回BOOL值,0表示创建线程成功,反之,创建失败.
pthread创建子线程代码实现
- (void)pthreadDemo
{
// 参数1:在C语言中定义类型通常是使用以"_t"/"ref"(CGContextRef)结尾的结构体.
// C语言是面向过程的编程思想,没有对象的概念.
pthread_t pthread = NULL;
// 参数2:传入空值
// 参数3:<#void *(*)(void *)#>
// 参数4:暂时传入空值
/**
在C语言中, void * (指向任何地址的指针),和OC中的 id (万能指针)是等价的.
void * :任何类型的返回值.
(*) :指向函数的指针,即函数名.类似的有数组的数组名表示数组的第0个元素的地址.
(void *) :函数参数.
void * (*) (void *)
返回值 线程函数 参数
*/
// 返回值:在C语言中,很多框架并不是"非零即真"的原则,而是,0表示成功.
// 成功的结果只有一种,但是失败的原因有多种.
int result = pthread_create(&pthread, NULL, demo, NULL);
if (0==result) {
NSLog(@"线程创建成功");
} else {
NSLog(@"线程创建失败");
}
}
/// 新线程入口
void *demo(void *param)
{
NSLog(@"demo中线程创建成功");
return NULL;
}
桥接 __bridge
- 传入参数
- 接收参数
__bridge
结论:
- MRC :
谁申请,谁释放
- ARC : 编译器会根据代码结构,在适当的位子添加release/reatin/autorelease来管理内存.
- 在ARC环境下,编译器是不会处理C语言申请的内存的,所以我们在做C语言和OC语言的混合开发的时候,需要使用__bridge,告诉编译器如何管理C语言的内存,即,什么都不用做
- 提问 : MRC环境下,需不需要使用__bridge?
- 不需要,因为MRC环境下内存管理程序猿自己做的.