pthread

    xiaoxiao2026-06-18  2

    #import <pthread.h>

    - (void)pthreadDemo {     /**      pthread & socket            返回值:            - 若线程创建成功,则返回 0      - 若线程创建失败,则返回出错编号            参数:            1> 第一个参数为指向线程标识符的指针         1) 在 C 语言框架中,没有对象的概念,对象是通过结构体来实现的         2) 通常"对象"的类型,会以 _t / Ref 结尾         3) 定义的时候,不需要使用 '*'            2> 第二个参数用来设置线程属性      3> 第三个参数是线程运行"函数"的"起始地址"               void *(*)(void *)         * block 匿名的函数指针         * 定义: 返回值 (^) (参数)                  在 C 语言中的 void * 和 OC 中的 id 是等价的               id (函数名就是指向函数起始位置的地址 的别名) (id)         * 数组名:指向数组第一个元素的地址            4> 最后一个参数是运行函数的参数            关于 __bridge - 桥接            内存管理的概念:            ARC 自动管理内存!      特点:      1> 编译器在编译代码的时候,会根据 "OC 代码"的结构,自动添加 retain/release/autorelease      2> ARC 只负责 OC 部分的代码,不负责 C/C++ 语言部分的代码      3> 如果开发的时候,涉及到混合语言开发,如果使用 C 语言的函数,出现 create/copy/retain/new 等字样,大多数需要程序员手动 'release',否则会出现内存泄漏      4> 在混合开发的时候,如果涉及到 C 框架 和 OC 框架之间传递参数,需要使用 "桥接" 告诉编译器如何管理内存         __bridge 就是保留原有的管理方式      5> 提问:MRC 中需要使用桥接吗?不需要!MRC中所有内存都是程序员负责的!      6> 提问:管理内存,管理的是哪一区域的内存:堆区!特点:alloc/copy/retain 等等字样的函数都是和堆区有关的!           有关桥接的增加:直接利用 Xcode 的智能提示就可以!      */     pthread_t threadId = NULL;          // 准备参数     id str = @"hello thread";          int result = pthread_create(&threadId, NULL, demo, (__bridge void *)(str));          if (result) {         NSLog(@"线程创建失败 %d", result);     } else {         NSLog(@"OK");     } }

    // 线程要调用执行的函数 // [NSThread currentThread] 可以在所有的多线程技术中使用! // 查看当前代码执行所在的线程 void * demo (void * param) {     NSString *str = (__bridge NSString *)(param);          NSLog(@"%@ --- %@", [NSThread currentThread], str);          return NULL; }

    转载请注明原文地址: https://ju.6miu.com/read-1310643.html
    最新回复(0)