#import "OneViewController.h" @interface OneViewController () @end @implementation OneViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark 方法 //依靠C语言来执行,效率最高 //串行队列 - (IBAction)serialBtn:(id)sender { //1.创建行对列 //1.获取系统创建好的串行对列,在主线程中是实现线程同步 dispatch_queue_t queue1 = dispatch_get_main_queue(); //2.自己创建串行队列,任务在子线程中实现线程同步 dispatch_queue_t queue2 = dispatch_queue_create("com.lanou3g.oa", DISPATCH_QUEUE_SERIAL); //字符串 -- 唯一标示的作用(反域名形式),DISPATCH_QUEUE_SERIAL -- 指定为串行 //2.往队列中添加任务 dispatch_async(queue2, ^{ NSLog(@"任务一:%@",[NSThread currentThread]); }); dispatch_async(queue2, ^{ NSLog(@"任务二:%@",[NSThread currentThread]); }); dispatch_async(queue2, ^{ NSLog(@"任务三:%@",[NSThread currentThread]); }); dispatch_async(queue2, ^{ NSLog(@"任务四:%@",[NSThread currentThread]); }); //释放 dispatch_release(queue2); } //并行(并发)队列 - (IBAction)parallelBtn:(id)sender { //1.创建并发队列,系统创建好了四个 //1.使用系统创建好的并发队列 dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 参数分别是:优先级,预留参数 //2.自己创建并发队列 dispatch_queue_t queue2 = dispatch_queue_create("com.lanou3g.oa", DISPATCH_QUEUE_CONCURRENT); // 参数1.唯一标示,参数二 指定为并发队列 //3.往队列中添加任务 dispatch_async(queue2, ^{ NSLog(@"任务1: %@",[NSThread currentThread]); }); dispatch_async(queue2, ^{ NSLog(@"任务2: %@",[NSThread currentThread]); }); dispatch_async(queue2, ^{ NSLog(@"任务3: %@",[NSThread currentThread]); }); dispatch_async(queue2, ^{ NSLog(@"任务4: %@",[NSThread currentThread]); }); //请求图片 //跳转到主线程刷新界面 dispatch_async(dispatch_get_main_queue(),^{ //更新 UI 显示图片 }); //释放 dispatch_release(queue2); } //分组任务 - (IBAction)groupBtn:(id)sender { //1.创建并行队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.创建分组 dispatch_group_t group = dispatch_group_create(); //3.方分组中添加任务 dispatch_group_async(group, queue, ^{ NSLog(@"任务一,请求 0 - 20 M数据"); }); dispatch_group_async(group, queue, ^{ NSLog(@"任务二,请求 0 - 20 M数据"); }); dispatch_group_async(group, queue, ^{ NSLog(@"任务三,请求 0 - 20 M数据"); }); dispatch_group_async(group, queue, ^{ NSLog(@"任务四,请求 0 - 20 M数据"); }); dispatch_group_async(group, queue, ^{ NSLog(@"任务五,请求 0 - 20 M数据"); }); //4.当分组内的所有任务完成之后,拼接操作 dispatch_group_notify(group, queue, ^{ NSLog(@"拼接数据吧!"); }); //释放 dispatch_release(group); } //一次 - (IBAction)oneBtn:(id)sender { } //障碍 - (IBAction)obstacleeBtn:(id)sender { //障碍任务的作用:可以保证障碍之后的并发的任务,必须在障碍之前的并发的任务执行结束之后,才可以开始执行 //注意:要添加障碍任务,必须要使用自己创建的并发队列. //创建并发队列 dispatch_queue_t queue = dispatch_queue_create("com.lanou.3g.oa",DISPATCH_QUEUE_CONCURRENT); //往队列中添加任务 dispatch_async(queue, ^{ NSLog(@"A写入文件"); }); dispatch_async(queue, ^{ NSLog(@"B写入文件"); }); dispatch_async(queue, ^{ NSLog(@"C写入文件"); }); dispatch_async(queue, ^{ NSLog(@"D写入文件"); }); //添加(设置)障碍任务 dispatch_barrier_async(queue, ^{ NSLog(@"此处是障碍任务"); }); dispatch_async(queue, ^{ NSLog(@"读取文件"); }); //释放 dispatch_release(queue); } //延迟 - (IBAction)delayBtn:(id)sender { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"5秒,五秒"); }); //dispatch_get_main_queue 在主线程中执行,如果想要在子线程中执行,此处改为子线程即可 } //反复执行 - (IBAction)diReceiveMemoryBtn:(id)sender { // dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) { // NSLog(@"反复执行的次数:%ld,当前线程%@",index,[NSThread currentThread]); // }); dispatch_apply(10, dispatch_get_main_queue(), ^(size_t index) { NSLog(@"反复执行的次数:%ld,当前线程%@",index,[NSThread currentThread]); }); }@end
//单例
#import "Singleton.h" @implementation Singleton //+ (id)mainSingleton{ // static Singleton *single = nil; // @synchronized(self){ // if(!single){ // single = [[Singleton alloc] init]; // } // // } // return single; //} + (id)mainSingleton{ static Singleton *single = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //写只执行一次的代码 single = [[Singleton alloc] init]; }); return single; }
时间: 2024-10-14 04:35:30