#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; }
使用时,直接导入上面的头文件即可.以"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 };