iOS 多线程(一)Pthread

pthread 是 iOS 多线程的底层实现方式(是POSIX多线程开发框架,是跨平台的C语言框架),平时开发使用很少用到
代码示例如下:

/ 创建线程,并且在线程中执行 demo 函数
- (void)pthreadDemo {
/**
参数:
1> 指向线程标识符的指针,C 语言中类型的结尾通常 _t/Ref,而且不需要使用 *
2> 用来设置线程属性
3> 线程运行函数的起始地址
4> 运行函数的参数

 返回值:
 - 若线程创建成功,则返回0
 - 若线程创建失败,则返回出错编号
 */
pthread_t threadId = NULL;
NSString *str = @"Hello Pthread";
// 这边的demo函数名作为第三个参数写在这里可以在其前面加一个&,也可以不加,因为函数名就代表了函数的地址。
int result = pthread_create(&threadId, NULL, demo, (__bridge void *)(str));

if (result == 0) {
    NSLog(@"创建线程 OK");
} else {
    NSLog(@"创建线程失败 %d", result);
}
// pthread_detach:设置子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。
pthread_detach(threadId);

}

// 后台线程调用函数
void *demo(void *params) {
NSString str = (__bridge NSString )(params);

NSLog(@"%@ - %@", [NSThread currentThread], str);

return NULL;

}

总结:
1.在C语言中,没有对象的概念,对象类型是以 -t/Ref 结尾的,并且声明不需要*
2.C语言中的void* 和OC中的id是等价的
3.内存管理

  1. 在oc中,如果是ARC开发 ,编译器会在编译时,根据代码结构自动添加 retain release autorelease
  2. ARC只负责管理oc部分的内存管理,而不处理c语言代码的内存管理
  3. 因此,开发过程中,如果使用的C语言框架出现retain create copy new 等字样的函数,大多需要release,否则会出现内存泄漏

在混合开发时,如果在C和OC之间传递数据,需要使用 __bridge进行桥接,桥接的目的就是为了告诉编译器如何管理内存
桥接的添加可以借助Xcode的辅助功能添加
MRC中不需要使用桥接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值