使用宏定义创建单例

//单例

#ifndef KCSingleton_h
#define KCSingleton_h

#pragma mark 接口.h中的定义
//由于宏定义里有需要替换的内容所以定义一个变量className
//##用于分割、连接字符串
#define singleton_interface(className) +(className *)shared##className;

#pragma mark 实现.m
//\在代码中用于连接宏定义,以实现多行定义
#define singleton_implementation(className) \
static className *_instance;\
+(id)shared##className{\
    if(!_instance){\
        _instance=[[self alloc]init];\
    }\
    return _instance;\
}\
+(id)allocWithZone:(struct _NSZone *)zone{\
    static dispatch_once_t dispatchOnce;\
    dispatch_once(&dispatchOnce, ^{\
        _instance=[super allocWithZone:zone];\
    });\
    return _instance;\
}

#endif

 

posted @ 2015-04-12 00:18  幻想无极  阅读(280)  评论(0编辑  收藏  举报