美文网首页
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