单例的常用写法

#define single_interface(class)  + (class *)shared##class;

#define single_implementation(class) 
static class *_instance; 
 
+ (class *)shared##class 
{ 
    if (_instance == nil) { 
        _instance = [[self alloc] init]; 
    } 
    return _instance; 
} 
 
+ (id)allocWithZone:(NSZone *)zone 
{ 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
        _instance = [super allocWithZone:zone]; 
    }); 
    return _instance; 
}
View Code

 使用时,直接导入上面的头文件即可.以"single_implementation(类名)"方式声明.以 "shared类名" 方式调用.

2.对于类以外的方法,可以用以下代码:

1 static dispatch_queue_t barrage_queue() {
2     static dispatch_queue_t barrage_queue1;
3     static dispatch_once_t onceToken;
4     dispatch_once(&onceToken, ^{
5         barrage_queue1 = dispatch_queue_create("com.pandatv.danmu.operation.queue",  DISPATCH_QUEUE_SERIAL);
6     });
7     return barrage_queue1;
8 };
View Code
原文地址:https://www.cnblogs.com/lz465350/p/5895290.html