首页 > 其他 > 详细

OC基础(27)

时间:2015-12-03 23:13:55      阅读:300      评论:0      收藏:0      [点我收藏+]

单例设计模式

本小节知识点:

  1. 【理解】单例模式概念
  2. 【理解】简单的单例模式实现

1.单例模式概念

  • 什么是单例模式:(Singleton)

    • 单例模式的意图是是的类的对象成为系统中唯一的实例,??供一个访问点,供客户类 共享资源。
  • 什么情况下使用单例?

    • 1、类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方 法。
    • 2、这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。
  • 单例设计模式的要点:

    • 1) 某个类只能有一个实例。
    • 2)他必须自行创建这个对象
    • 3)必须自行向整个系统??供这个实例;
    • 4)为了保证实例的唯一性,我们必须将
    • 5)这个方法必须是一个静态类

2.简单的单例模式实现

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


#if __has_feature(objc_arc)
// ARC
#define implementationSingleton(name)  + (instancetype)share##name { name *instance = [[self alloc] init]; return instance; } static name *_instance = nil; + (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[super allocWithZone:zone] init]; }); return _instance; } - (id)copyWithZone:(NSZone *)zone{ return _instance; } - (id)mutableCopyWithZone:(NSZone *)zone { return _instance; }
#else
// MRC

#define implementationSingleton(name)  + (instancetype)share##name { name *instance = [[self alloc] init]; return instance; } static name *_instance = nil; + (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[super allocWithZone:zone] init]; }); 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; }
#endif


OC基础(27)

原文:http://www.cnblogs.com/zhoudaquan/p/5017862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!