(1) 某个类只能有一个实例。
(2)他必须自行创建这个对象
(3)必须自行向整个系统提供这个实例;
(4)为了保证实例的唯一性,我们必须将 -(id)copyWithZone:(NSZone *)zone 、+(id)allocWithZone:(NSZone *)zone、 -(id)retain、 -(NSUInteger)retainCount 、-(oneway void)release
、-(id)autorelease 的实现方法进行覆盖。(具体实现请看程序)
(5)这个方法必须是一个静态类
- GCD 创建单例
- +(id)sharedManager {
- static MyManager*sharedMyManager = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- sharedMyManager = [[self alloc] init];
- });
- return sharedMyManager;
- }
- 非-GCD 代码
- + (id)sharedManager {
- @synchronized(self) {
- if (sharedMyManager == nil)
- sharedMyManager = [[self alloc] init];
- }
- returnsharedMyManager;
- }
复制代码
常见问题详见:
<http://blog.sina.com.cn/s/blog_797bb4bf01015t7u.html>
<http://blog.csdn.net/jiangwei0910410003/article/details/41928053>
|
|