苹果开发 笔记(50)GCD

来源:互联网 发布:在淘宝怎么打开淘口令 编辑:程序博客网 时间:2024/06/05 15:16

今天看了一些GCD 多线程异步执行的API。这些API看起来向一个函数,有一些人已经封测了它,变得更加直观和便于理解。下面先记录一些先。

一些常用的API

//异步执行一个线程dispatch_async(queue,^{});//创建一个线程dispatch_queue_t queue =     dispatch_queuq_create("com.example.queue",NULL);//获取主线程的方法dispatch_get_main_queue();//优先级获取方法dispath_queue_t queue = dispatch_get_global_queue(优先级,0);Dispatch Queue 的种类 有几种//优先级常量DISPATCH_QUEUE_PRIORITY_HIGH DISPATCH_QUEUE_PRIORITY_DEFAULTDISPATCH_QUEUE_PRIORITY_LOW DISPATCH_QUEUE_PRIORITY_BACKGROUND//延迟执行dispatch_afterdispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull*NSEC_PER_SEC);

处理线程的API,有涉及到暂停,挂起,恢复,取消,等待、延迟执行,线程组,同步和异步 ,死锁,只执行一次,等系列的概念出现。这些概念大部分是对于处理线程和任务。

dispatch_time_tdispatch_once_t dispatch_afterdispatch_group_waitdispatch_releasedispatch_barrier_asyncdispatch_async //异步dispatch_sync //同步dispatch_applydispatch_io_create 

2015-7-19日 更新

在看gcd的时候,当中提及到线程过多时候,会引发内存问题。导致系统内存开销过多,效率降低。

同样多线程在更新相同一个资源的时候,会造成数据竞争的问题。

同步执行的时候容易出现死锁的问题,导致UI卡顿的问题发生。

系统提供了标准的Dispatch Queue
1.Main Dispatch Queue
2.Glocal Dispatch Queue

通过dispatch_get_global_queue 可以获取到不同等级的线程
通过dispatch_get_main_queue 获取主线程

2015-7-22日 更新
在书中看到一段关于刷新UI的做法,在后台执行循环,在主线程刷新UI。

 dispatch_async(dispatch_get_global_queue(0,0),^{   NSInteger count = [numOfInstructions.text intValue];   for (int i = 0; i<count;i++)   {      dispatch_async(dispatch_get_main_queue(),^{      currentCount.text =[NSString stringWithFormat:@"instruction%d",i];     });   } });

2015-7-23日 更新
使用dispatch_once 构建一个单例

+(SingleManager) shareManager{  static dispatch_once_t once;  static SingleManager *instance;  dispatch_once(&once,^{     instance = [[self alloc]init];   }   return instance;} 

2015-7-24日 更新
使用dispatch_after 延迟 处理执行

 MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.labelText =@"拼命加载中";dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 10 *NSEC_PER_SEC);    dispatch_after(popTime, dispatch_get_main_queue(), ^{        [MBProgressHUD hideAllHUDsForView:self.view animated:YES];    });
0 0
原创粉丝点击