美文网首页
iOS开发之多线程—PThread<二>

iOS开发之多线程—PThread<二>

作者: f1e583c455bf | 来源:发表于2017-05-11 16:54 被阅读0次

一、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;
}

打印结果:


运行结果

相关文章

网友评论

      本文标题:iOS开发之多线程—PThread<二>

      本文链接:https://www.haomeiwen.com/subject/ycwotxtx.html