ios

单例模式

2015-10-15  本文已影响92人  iOS_Cqlee

单例模式的作用

可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问

从而方便地控制了实例个数,并节约系统资源

单例模式的使用场合

在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)

#define interfaceSingle(name)+ (instancetype)share##name

#if __has_feature(objc_arc)

//如果是ARC

#define implementationSingle(name)+ (instancetype)share##name \

{ \

return [[self alloc] init]; \

} \

static id _instance; \

+ (instancetype)allocWithZone:(struct _NSZone *)zone \

{ \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instance = [super allocWithZone:zone]; \

}); \

return _instance; \

} \

- (id)copyWithZone:(NSZone *)zone \

{ \

return _instance; \

} \

- (id)mutableCopyWithZone:(NSZone *)zone \

{ \

return _instance; \

}

#else

//如果不是ARC

#define implementationSingle(name)+ (instancetype)share##name \

{ \

return [[self alloc] init]; \

} \

static id _instance; \

+ (instancetype)allocWithZone:(struct _NSZone *)zone \

{ \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instance = [super allocWithZone:zone]; \

}); \

return _instance; \

} \

- (id)copyWithZone:(NSZone *)zone \

{ \

return _instance; \

} \

- (id)mutableCopyWithZone:(NSZone *)zone \

{ \

return _instance; \

}\

- (oneway void)release \

{} \

- (instancetype)retain \

{ \

return _instance; \

} \

- (NSUInteger)retainCount \

{ \

return MAXFLOAT; \

}

上一篇 下一篇

猜你喜欢

热点阅读