加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite

发布时间:2020-12-12 23:59:52 所属栏目:百科 来源:网络整理
导读:Hark-Huang 0我的:收件箱 资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 刘伟Derick-IOS应用开发(iPhone iPad 应用、游戏)潇洒的程序员 如果您喜欢可以多留言支持,收藏我的博客。每天都有值得您关注的文章。 目录视图 摘要
声明欢迎转载,但是请尊重作者劳动成果,转载请保留此框内声明,谢谢。
文章出处:http://blog.csdn.net/iukey




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

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

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

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

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

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

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

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

[java] view plain copy print ?
  1. @implementationTCPClient
  2. staticTCPClient*tcpClient=nil;
  3. +(TCPClient*)getInstance{
  4. if(tcpClient==nil){
  5. tcpClient=[[superallocWithZone:NULL]init];
  6. }
  7. returntcpClient;
  8. +(id)allocWithZone:(NSZone*)zone{
  9. return[[selfgetInstance]retain];//返回单例
  10. -(id)copyWithZone:(NSZone*)zone{
  11. returnself;
  12. -(id)retain{
  13. -(NSUInteger)retainCount{
  14. returnNSUIntegerMax;
  15. -(onewayvoid)release{///oneway用在分布式对象的API,这些API可以在不同的线程,甚至是不同的程序。oneway关键字只用在返回类型为void的消息定义中,因为oneway是异步的,其消息预计不会立即返回。
  16. //什么都不做
  17. -(id)autorelease{
  18. returnself;
  19. }
  20. @end


分享到: 顶 116 踩 0 查看评论 4楼 mr_boog2013-01-30 18:36发表[回复] +10086 3楼 zhaozy555552012-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楼 haburongyi2012-03-12 20:22发表[回复] 有UML图就好了 iOS开发者2012-09-24 00:18发表 回复haburongyi:MAC下面UML图不好画啊,不过一个单例模式我觉得还用不着UML图。 发表评论
  • 用 户 名:
  • a174787252
  • 评论内容:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人简介
      刘伟 男 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篇

阅读:19143 IOS应用开发词典

文章: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 LinezingStat

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

Hark-Huang0我的:收件箱资源博客空间设置|帮助|退出

  • 首页
  • 业界
  • 移动
  • 云计算
  • 研发
  • 论坛
  • 博客
  • 下载
  • 更多

刘伟Derick-IOS应用开发(iPhone iPad 应用、游戏)潇洒的程序员

如果您喜欢可以多留言支持,收藏我的博客。每天都有值得您关注的文章。

  • 目录视图
  • 摘要视图
  • 订阅
专访赵霏:应把握机会 HTML5游戏开发已臻成熟 2013年7月微软MVP当选名单揭晓 CSDN博客频道自定义摘要、图片水印、热门标签等功能上线啦 CSDN博客第二期云计算最佳博主评选

Singleton 单例模式 -IOS开发

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

    推荐文章
      热点阅读