A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夜空守望者 中级黑马   /  2015-9-5 09:57  /  721 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(1) 某个类只能有一个实例。  
(2)他必须自行创建这个对象  
(3)必须自行向整个系统提供这个实例;
(4)为了保证实例的唯一性,我们必须将 -(id)copyWithZone:(NSZone *)zone  、+(id)allocWithZone:(NSZone *)zone、 -(id)retain、  -(NSUInteger)retainCount 、-(oneway void)release
 、-(id)autorelease  的实现方法进行覆盖。(具体实现请看程序)  

(5)这个方法必须是一个静态类
  1. GCD 创建单例

  2. +(id)sharedManager {
  3.     static MyManager*sharedMyManager = nil;
  4.     static dispatch_once_t  onceToken;
  5.    dispatch_once(&onceToken, ^{
  6.         sharedMyManager = [[self alloc] init];
  7.     });
  8.     return sharedMyManager;
  9. }



  10. 非-GCD 代码
  11. + (id)sharedManager {
  12.     @synchronized(self) {
  13.        if (sharedMyManager == nil)
  14.            sharedMyManager = [[self alloc] init];
  15.     }
  16.     returnsharedMyManager;
  17. }
复制代码



常见问题详见:
<http://blog.sina.com.cn/s/blog_797bb4bf01015t7u.html>
<http://blog.csdn.net/jiangwei0910410003/article/details/41928053>

2 个回复

倒序浏览
厉害,都看到了基础视频的最后了,
回复 使用道具 举报
支持一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马