单例的常用写法
#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 };