第二天-多线程

(1)GCD,纯C,自动管理生命周期,大中央调度,要理解队列与任务,任务在队列里面去除遵循先进先出的准则。

(2)NSOperation,OC,基于GCD的封装,自动管理生命周期,把操作(NSOperation)放进队列(NSOperationQueue)里面,里面的额操作会异步执行。

  • 线程间怎么通信?

    • perfromSelectior:onThead:withObjecti:waitUntilDone:
    • NSMachPort(在RunLoop里面的source0和source1里面)
  • cocoa常见的多线程实现
    • 只有在主线程刷新访问UI
    • 如果要保证属性的线程安全(atomic)
    • 如果一部操作要保证线程安全等问题,尽量使用GCD
    • 如果想要定时器精确,用GCD定时器
  • GCD内部实现
    • iOS和OSX的黑心是XNU内核,GCD是基于XNU内核实现的
    • GCD的API全部在libdiPatch库中
    • GCD的底层实现主要有DispatchQueue和DispatchSource
      • DispatchQueue:管理block(操作)
      • DispatchSource:处理事件(MACH端口发送,MACH端口接收,监测与进程的事件的10种事件)
  • NSOperation相对于GCD的优点
    • 面向对象
    • 封装性好
    • 提供便利的方法
    • 支持KVO,可以监测operation是否正在执行(isExecuted),是否结束(isFinished),是否取消(isCancled)
    • GCD的执行速度比NSOperationQueue快
    • 选择
      • 任务需要依赖或者要监听任务的执行情况,用NSOperationQueue
    • 在使用GCD的时候要防止循环引用
      • ARC:_weak_unsafe_unretained
      • MRC:_block
      • 晚安~~
时间: 2025-01-16 18:58:54

第二天-多线程的相关文章

秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

版权声明:本文为博主原创文章,未经博主允许不得转载. 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex? 使用多线程其实是非常容易的,下面这个程序的主线程会创建了一个子线程并等待其运行完毕,子线程就输出它的线程ID号然后输出一句经

秒杀多线程第二篇 多线程第一次亲热接触 CreateThread与_beginthreadex本质差别

本文将带领你与多线程作第一次亲热接触,并深入分析CreateThread与_beginthreadex的本质差别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex究竟有什么差别,在实际的编程中究竟应该使用CreateThread还是_beginthreadex? 使用多线程事实上是很easy的,以下这个程序的主线程会创建了一个子线程并等待其执行完成,子线程就输出它的线程ID号然后输出一句经典名言--Hello World.整个程序的代码很

黑马程序员系列第二篇 多线程(2)

ASP.Net+Android+IOS开发  .Net培训.期待与您交流! (前言:本篇文章主要依据毕向东老师的课程视频整理而成,如要详细学习,请观看毕老师视频  百度网盘链接地址:http://pan.baidu.com/s/1sjQRHDz) 目录:1.线程通信--生产消费者示例(线程通信安全.等待唤醒机制)    2.停止线程.及其会出现的问题.及解决的办法    3.守护线程及几个Thread的方法                   4.工作中线程的常见写法         1.线程通

IOS第二天多线程-05GCD队列的使用

************** // // HMViewController.m // 08-GCD02-队列的使用(了解) // // Created by apple on 14-9-15. // Copyright (c) 2014年 heima. All rights reserved. // // dispatch_sync : 同步,不具备开启线程的能力 // dispatch_async : 异步,具备开启线程的能力 // 并发队列 :多个任务可以同时执行 // 串行队列 :一个任务

IOS第二天多线程-04GCD通信

**** #define HMGlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) #define HMMainQueue dispatch_get_main_queue() #import "HMViewController.h" @interface HMViewController () @property (weak, nonatomic) IBOutlet UIButton *but

IOS第二天多线程-05NSOperationQueue 暂停,和恢复队列任务

*********** #import "HMViewController.h" @interface HMViewController () <UITableViewDelegate> @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; } -

IOS第二天多线程-02NSThread基本使用

**** #import "HMViewController.h" @interface HMViewController () @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)download:(NSStri

IOS第二天多线程-03对列组合并图片

********* // 2D绘图 Quartz2D // 合并图片 -- 水印 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 1.队列组 dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,

IOS第二天多线程-04简化单例模式

******HMSingleton-ARC.h // .h文件 #define HMSingletonH(name) + (instancetype)shared##name; // .m文件 #define HMSingletonM(name) static id _instance; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken,