sqlite

来源:互联网 发布:淘宝商城加盟 编辑:程序博客网 时间:2024/06/06 18:06
专访赵霏:应把握机会 HTML5游戏开发已臻成熟        2013年7月微软MVP当选名单揭晓      CSDN博客频道自定义摘要、图片水印、热门标签等功能上线啦      CSDN博客第二期云计算最佳博主评选     
 

Singleton 单例模式 -IOS开发

分类: IOS开发(所有IOS文章) Objective-C 设计模式(UML) 4602人阅读 评论(8) 收藏 举报
ios设计模式多线程apinull

声明
欢迎转载,但是请尊重作者劳动成果,转载请保留此框内声明,谢谢。
文章出处:http://blog.csdn.net/iukey




Singleton 单例模式,又叫单子模式,是一种常见的软件设计模式。这种模式的特点就是应用了 Singleton 单例模式的类必须保证始终只有一个实例(对象)存在。许多时候系统中需要某个类只能同时存在一个对象,而且可以全局调用。

单例模式的思路是一个类能返回对象一个实例(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用 getInstance这个名称);当我们调用这个方法时,如果类持有的实例不为空,就返回这个实例;如果类保持的实例为空,就创建该类的实例,并将实例赋予该类保持的实例,从而限制用户只有通过该类提供的静态方法来得到该类唯一的实例。

单例模式在多线程场合下必须小心使用。当唯一的实例未创建时,如果有两个线程同时调用创建方法,那么他们同时没有检测到唯一的实例存在,从而同时各自创建了一个实例,这样就有两个实例被创建出来,从而违反了单例模式中实例唯一的原则。解决这个问题的办法是为标记类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。

下面用一个例子来说明问题:

一:为你的单例类声明一个静态的实例,并且初始化它的值为nil。

二:在获取实例的方法中(比如下例中的 getInstance),只有在静态实例为nil的时候,产生一个你的类的实例,这个实例通常被称为共享的实例。

三:重写allocWithZone 方法,用于确定:不能够使用其他的方法来创建我们不得实例,限制用户只能通过获取实例的方法得到这个类的实例。所以,我们在allocWithZone方法中直接返回共享的类实例。

四:实现基本的协议方法 copyWithZone、release、retain、retainCount 和 autorelease,用于保证单例具有一个正确的状态。最后四种方法是哟娜与内存管理的代码,并不适用于垃圾收集代码。

[java] view plaincopyprint?
  1. @implementation TCPClient  
  2. static TCPClient * tcpClient = nil;  
  3.   
  4. +(TCPClient*)getInstance{  
  5.     if (tcpClient == nil) {  
  6.         tcpClient = [[super allocWithZone:NULL]init];  
  7.     }  
  8.     return tcpClient;  
  9. }  
  10.   
  11. + (id)allocWithZone:(NSZone *)zone{  
  12.     return [[self getInstance]retain];//返回单例  
  13. }  
  14.   
  15. - (id)copyWithZone:(NSZone*)zone{  
  16.     return self;  
  17. }  
  18.   
  19. - (id)retain{  
  20.     return self;  
  21. }  
  22.   
  23. - (NSUInteger)retainCount{  
  24.     return NSUIntegerMax;  
  25. }  
  26.   
  27. - (oneway void)release{///oneway用在分布式对象的API,这些API可以在不同的线程,甚至是不同的程序。oneway关键字只用在返回类型为void的消息定义中, 因为oneway是异步的,其消息预计不会立即返回。  
  28.     //什么都不做  
  29. }  
  30. - (id)autorelease{  
  31.     return self;  
  32. }  
  33. @end  


116
0
查看评论
4楼 mr_boog 2013-01-30 18:36发表 [回复]
+10086
3楼 zhaozy55555 2012-12-20 15:25发表 [回复]
你的singleton没有考虑到多线程的情况。
2楼 电子咖啡 2012-11-03 21:46发表 [回复]
请问单利需要释放吗
Re: iOS开发者 2012-11-03 21:49发表 [回复]
回复shencaifeixia1:单例不是需不需要释放,而是不能释放,否则就是去了单例的意义,对吧。
Re: 电子咖啡 2012-11-03 22:13发表 [回复]
回复iukey:哈哈,不错不错,我刚刚也做了实验,在singleton方面又有了些收获,谢谢了http://blog.csdn.net/shencaifeixia1/article/details/8144718
Re: iOS开发者 2012-11-03 22:15发表 [回复]
回复shencaifeixia1:呵呵,恭喜。
1楼 haburongyi 2012-03-12 20:22发表 [回复]
有UML图就好了
Re: iOS开发者 2012-09-24 00:18发表 [回复]
回复haburongyi:MAC下面UML图不好画啊,不过一个单例模式我觉得还用不着UML图。
发表评论
  • 用 户 名:
  • a174787252
  • 评论内容:
  • 插入代码
      
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
TOP
    个人简介
          刘伟 男 25周岁
          数学与应用数学本科
       
      2011.05—2012.05:
          某音视频软件公司从事IOS应用开发。
      2011.06—今:
          群硕上海公司从事IOS应用开发。
      工作内容:
          音视频通话软件开发。
          图片分享社交类软件开发。
      使用语言:
          C/C plus plus 、Object-C
      个人研究方向:
          企业级移动应用、personal cloud、物联网。
      业余爱好:
          android应用开发、网站建设、VBA、视频拍摄与后期。
      eMail:masterliuwei@gmail.com
      IOS开发交流群:78510867

                        
    文章分类
  • IOS开发(所有IOS文章)(71)
  • git & svn(0)
  • ---控件编程(IOS)(11)
  • ---UITableView(IOS表格视图)(2)
  • 官方文档(6)
  • ---音视频编程(IOS)(4)
  • ---网络编程(IOS)(0)
  • ---sqlite(IOS)(6)
  • Objective-C(17)
  • C/C++(12)
  • 算法与数据结构(4)
  • 设计模式(UML)(2)
    博客专栏
    sqlite基础教程

    文章:6篇

    阅读:19143IOS应用开发词典

    文章:5篇

    阅读:29438
    个人资料
     
    iOS开发者
     
    • 访问:245097次
    • 积分:8781分
    • 排名:第347名
    • 原创:78篇
    • 转载:0篇
    • 译文:0篇
    • 评论:168条
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
QQ客服 微博客服 论坛反馈 联系邮箱:webmaster@csdn.net 服务热线:400-600-2320
京 ICP 证 070598 号
北京创新乐知信息技术有限公司 版权所有
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
Copyright © 1999-2012, CSDN.NET, All Rights Reserved GongshangLogo
LinezingStat  
原创粉丝点击