GCD的常用代码块

一、队列

1、获取全局的并发队列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

2、创建一个串行队列

dispatch_queue_t queue = dispatch_queue_create("queueName", NULL);

3、获取主队列

dispatch_queue_t queue = dispatch_get_main_queue();

二、执行函数

1、将任务添加到xx队列中去异步执行

dispatch_async(queue, ^{
        NSLog(@"-----下载1---%@", [NSThread currentThread]);
    });

2、将任务添加到xx队列中去同步执行

dispatch_sync(queue, ^{
        NSLog(@"-----下载2---%@", [NSThread currentThread]);
    });

三、线程间的通信

dispatch_async(GlobalQueue, ^{
        // 1.子线程下载图片

        dispatch_async(MainQueue, ^{
                // 2.回到主线程设置图片

        });
    });

四、延迟执行

1、3秒后回到主线程执行block中的代码

dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), queue, ^{
        NSLog(@"------task------%@", [NSThread currentThread]);
    });

2.3秒后自动开启新线程执行block中的代码

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), queue, ^{
        NSLog(@"------task------%@", [NSThread currentThread]);
    });

五、一次性执行

+ (instancetype)client
{
    static AFNetClient *client = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        client = [[AFNetClient alloc]init];
    });
    return client;
}

六、队列组的使用

dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_async(group, queue, ^{
  // 1.下载图片1  });
dispatch_group_async(group, queue, ^{
  // 2.下载图片2
    });

// 3.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block)
dispatch_group_notify(group, queue, ^{  // 3.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block)
    dispatch_async(dispatch_get_main_queue(), ^{    // 4.回到主线程显示图片
        });
});

七、创建单例

1、工具宏文件HMSingleton.h

// .h文件
#define HMSingletonH(name) + (instancetype)shared##name;

// .m文件
#if __has_feature(objc_arc)

    #define HMSingletonM(name)     static id _instace;      + (id)allocWithZone:(struct _NSZone *)zone     {         static dispatch_once_t onceToken;         dispatch_once(&onceToken, ^{             _instace = [super allocWithZone:zone];         });         return _instace;     }      + (instancetype)shared##name     {         static dispatch_once_t onceToken;         dispatch_once(&onceToken, ^{             _instace = [[self alloc] init];         });         return _instace;     }      - (id)copyWithZone:(NSZone *)zone     {         return _instace;     }

#else

    #define HMSingletonM(name)     static id _instace;      + (id)allocWithZone:(struct _NSZone *)zone     {         static dispatch_once_t onceToken;         dispatch_once(&onceToken, ^{             _instace = [super allocWithZone:zone];         });         return _instace;     }      + (instancetype)shared##name     {         static dispatch_once_t onceToken;         dispatch_once(&onceToken, ^{             _instace = [[self alloc] init];         });         return _instace;     }      - (id)copyWithZone:(NSZone *)zone     {         return _instace;     }      - (oneway void)release { }     - (id)retain { return self; }     - (NSUInteger)retainCount { return 1;}     - (id)autorelease { return self;}

#endif

2、创建单例MHMusicTool

2.1、MHMusicTool.h文件

#import <Foundation/Foundation.h>

@interface HMMusicTool : NSObject
HMSingletonH(MusicTool)
@end

2.2、MHMusicTool.m文件

#import "HMMusicTool.h"

@implementation HMMusicTool
HMSingletonM(MusicTool)
@end

3、使用单例MHMusicTool

HMMusicTool *tool1 = [HMMusicTool sharedMusicTool];
HMMusicTool *tool2 = [HMMusicTool sharedMusicTool];
时间: 04-19

GCD的常用代码块的相关文章

iOS 常用代码块

1.判断邮箱格式是否正确的代码: // 利用正则表达式验证 -( BOOL )isValidateEmail:( NSString  *)email { NSString  *emailRegex =  @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" ; NSPredicate  *emailTest = [ NSPredicate   predicateWithFormat : @"SEL

常用代码块:创建httpclient 2

HttpGet httpGet = new HttpGet(url);SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(new MyTrustStrategy()).build(); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(3000).setConnectionRequestTimeout(3000).setSocket

常用代码块:使用时间生成数据库文件名

Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); String fileName= "jdbc:h2:~/"+sdf.format(d); cp = JdbcConnectionPool.create(fileName, "sa", "sa");

GCD 常用代码

体验代码 异步执行任务 - (void)gcdDemo1 { // 1. 全局队列 dispatch_queue_t q = dispatch_get_global_queue(0, 0); // 2. 任务 void (^task)() = ^ { NSLog(@"%@", [NSThread currentThread]); }; // 3. 指定执行任务的函数 // 异步执行任务 - 新建线程,在新线程执行 task dispatch_async(q, task); NSLog(

【swift】BlockOperation和GCD实用代码块

//BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @IBOutlet weak var image1: UIImageView! @IBOutlet weak var image2: UIImageView! @IBOutlet weak var image3: UIImageView! @IBOutlet weak var image4: UIIma

修饰符-包-内部类-代码块执行顺序

1.访问权限修饰符     从大到小的顺序为:public--protected--default--private     private--只能在同一类中使用;     default--不用写出来,默认不加.可以被同一包中的类使用     protected--可以被不同包的子类使用     public--可以被不同包的其它类使用 2.各种修饰符的修饰对象(可修饰哪些:类/接口/方法/属性)(多个修饰符连用是可以没有顺序的!)     1)访问权限修饰符:public/default--

java中静态代码块的用法—— static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的. 静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就

java-并发-保护代码块

线程经常需要协调其动作,最常用的协调方法就是保护代码块,该代码块以一个条件判断开始,当判断为true时才能开始执行. 假设一个方法guradedJoy必须等到变量joy由其他线程设定过后才能开始执行,这样的方法,理论上简单的循环直到满足条件就可以了,但是这样的循环是比较浪费资源的,因为等待的时候是在不停的执行的. public void guardedJoy() { // 简单的循环保护,不建议这样做,因为比较浪费处理器时间 while(!joy) {} System.out.println("

Xcode自定义代码块

到现在才发现原来Xcode有自定义代码块这么神奇的功能,能简化很多无聊的敲重复代码的工作,真是感叹我怎么才知道!!! 具体的设置流程见:http://nshipster.cn/xcode-snippets/   或者 http://www.sufeinet.com/thread-8732-1-1.html 然后我也把自己常用的几个写好了放到的github上:   https://github.com/Phelthas/LXMSnippets 使用方法: 将这些.codesnippet文件copy