单例模式只能修改无法释放,直到程序结束。

我们下面一步一步来做一个单例模式程序

(1)单例一旦创建,是永远存在于内存中的,所以需要创建一个全局量

static MySingletonClass *sharedSingleTonObj=nil;

(2)既然是单例,一定有一个构造方法直接忽略跳过实例对象的生成过程。据此看来“类方法”最合适不过了

+(MySingletonClass *)sharedSingleton
{
//多线程安全的关键字,相关概念可以参考多线程编程章节
@synchronized(self)
{
//创建
if(sharedSingletonObj==nil)
{
sharedSingletonObj= [[super allocWithZone:NULL] init];
}
//发出必要警告
else
{
NSLog(@"单例对象已经存在!");
}
}
return sharedSingletonObj;
}

(3)如果对sharedSingletonObj执行了copy呢?我们需要重新写copy方法

-(id)copyWithZone:(NSZone *)zone
{
return self;
}

(4)如果对sharedSingletonObj执行了retain呢?我们同样需要重写retain方法。

-(id)retain
{
return self;
}

(5)继续对release和autorelease的方法重写

-(void)release
{
} -(id)autorelease
{
return self;
}

(6)重要的一点!我们需要实现NSObjec里面,关于引用计数API的重写以避免因为引用计数为0导致dealloc的触发

-(NSUInteger)retainCount
{
//是一个无限大的int数,避免额系统自动触发单例dealloc方法
//也可以明确告知调用者,这是一个单例模式
return NSUIntegerMax;
}

(7)最后,你会发现就这样让人使用的话,如果不通过类方法创建对象转而调用alloc创建,则每次会分配新内存引用计数+1,显然alloc方法势必也不要重写

+(id)allocWithZone:(NSZone *)zone
{
//直接套用sharedSingleton,retain 符合alloc惯例
//使类方法返回的对象的引用计数+1,此处retain根据上面的重写内容,不做任何事情
return [[MySingletonClass sharedSingleton] retain];
}

我们需要注意的时:往往只需要一个单例对象而已,但是如果仍相用alloc和init创建这个类的其他对象,那上述写法中,我们不需要重写2,3,4,5,6的代码

注:如果用gcd的话 ,只要在.m文件中实现这就可以 .h文件中声明一下这个 + (XEMessageData*) sharedInstance;

+ (XEMessageData*) sharedInstance
{
static XEMessageData* sharedInstance;
static dispatch_once_t predicate;
dispatch_once(&predicate,^{
sharedInstance = [[self alloc] init];
sharedInstance.tempConversationMessageID2ConversationID = [[NSMutableDictionary alloc] init];
}); return sharedInstance;
}

IOS 单例模式的学习的更多相关文章

  1. iOS单例模式(Singleton)写法简析

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...

  2. IOS单例模式(Singleton)

    IOS单例模式(Singleton)   单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模 ...

  3. iOS开发如何学习前端(2)

    iOS开发如何学习前端(2) 上一篇成果如下. 实现的效果如下. 实现了一个横放的<ul>,也既iOS中的UITableView. 实现了当鼠标移动到列表中的某一个<li>,也 ...

  4. iOS开发如何学习前端(1)

    iOS开发如何学习前端(1) 我为何学前端?因为无聊. 概念 前端大概三大块. HTML CSS JavaScript 基本上每个概念在iOS中都有对应的.HTML请想象成只能拉Autolayout或 ...

  5. 移动开发iOS&Android对比学习--异步处理

    在移动开发里很多时候需要用到异步处理.Android的主线程如果等待超过一定时间的时候直接出现ANR(对不熟悉Android的朋友这里需要解释一下什么叫ANR.ANR就是Application Not ...

  6. 关于iOS开发的学习

    关于iOS开发的学习,打个比方就像把汽车分解:    最底层的原料有塑料,钢铁    再用这些底层的东西造出来发动机,座椅    最后再加上写螺丝,胶水等,把汽车就拼起来了 iOS基本都是英文的资料, ...

  7. IOS之Objective-C学习 ARC下的单例模式

    单例模式是我常用的一种设计模式,最常见的用途就是用来保存数据并且传递数据.这都归功于单例模式的特性,首先就让我为大家简单介绍一下单例模式的特性. 单例模式的三大特性: 1.某个类只能有一个实例: 2. ...

  8. iOS 单例模式 学习 "52个方法 第6章 45条 使用 dispath_once 来执行只需运行一次的线程安全代码"

    百度定义:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 维基百科:在软件工程中,单例是一种用于实现单例的数学概念,即将 ...

  9. IOS 单例模式的写法

    iOS的单例模式有两种官方写法,如下: 1)不使用GCD的方式 #import "Manager.h" static Manager *manager; @implementati ...

随机推荐

  1. 让 collabtive-11 支持中文

    collabtive, 不错的项目管理工具, 将在新项目中使用之; 但在默认安装 collabtive-11 之后 发现在里面输入中文后会出错, 网上找不了少资料但对 11这版本的中文支持的修改不起不 ...

  2. Deep Learning(深度学习)学习笔记整理系列之(二)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  3. [转载]VMWare网络连接透析

    http://blog.csdn.net/struggleyb/article/details/1102214 以前在学校,VMWare里面的Gentoo Linux是采用network bridge ...

  4. J - 搞笑版费马大定理

    J - 搞笑版费马大定理 Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit  ...

  5. javascript 预定义函数

    parseInt() parseFloat() isNaN() isFinite() encodeURI() decodeURI() encodeURIComponent() decodeURICom ...

  6. ASP中 Request.Form中文乱码的解决方法

    分享下解决方法直接用request.Form()获取的是所有数据所以会有乱码(具体原因不祥) 用 VBScript code Foreach obj in Request.Form Response. ...

  7. MySQL 基础学习

    http://www.w3school.com.cn/sql/ 1.limit x,y 或 limit z  :选取从x开始的y条数据  或  选取最开始的 z条数据 , 2.like '%N%' : ...

  8. ObjectiveC 文件操作一

    1,引用和使用文件 NSFileManager 是一个单例对象,在mac应用中可以获取任何地址,在IOS中获取的是相对应的应用程序的地址.可以使用 defaultManager 来得到当前应用程序地址 ...

  9. 使用Fiddler解析WCF RIA Service传输的数据

    原文 http://www.cnblogs.com/wintersun/archive/2011/01/05/1926386.html 使用Fiddler 2 解析WCF RIA Service传输的 ...

  10. 经验分享:CSS浮动(float,clear)通俗讲解 太棒了,清晰明了

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...