专栏首页宜达数字iOS开发-单例模式(ARC与MRC)

iOS开发-单例模式(ARC与MRC)

单例一般作为工具类 单例命名:一般情况下如果一个类是单例,那么就会提供一个类方法用于快速创建单例对象 而且这个类方法的名称是有一定的规则:share + 类名称 / default + 类名称 ARC(自动引用计数模式) ![Paste_Image.png](http://upload-images.jianshu.io/upload_images/642887-5218c39a7d979d20.png? imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Paste_Image.png

实现下面这两个方法前提遵守(NSCopying, NSMutableCopying)

Paste_Image.png

MRC 这个里面就必须注意retainCount release等操作 因为单例是全局只有一份,一旦release,计数器变为0,那么再去创建单例对象就会造成坏内存访问。

Paste_Image.png

这里其实还可以对引用计数器做一步操作,也就是实现这一步,你肯定是开发经验充足的程序员,不实现也不会有什么后果

Paste_Image.png

因为打印系统的一些单例对象的计数器会发现打印出来数值会很大,所以我们创建出来的单例实现上述方法,比格自然就提升上去了。(注:返回的数值可以自己填写,也可以MaxFloat)

虽然上面的单例代码已经解决了单例问题,但是复用性特别不好,我们需要可以很方便的在ARC或者MRC下进行开发的单例模式

Paste_Image.png

我们可以在else的里面把MRC的代码写进去。 这样系统就会根据开发环境来判断

一些情况下:我们经常用到单例这个类,但是这里面后续会写很多方法,所以我们会搞很多子类,子类里面有网络、工具类的单例,所以子类按照逻辑也要实现单例。

那么问题就来了: 1、一个单例子类(例如:son)创建对象调用alloc方法 2、会通过allocWithZone创建一个全局单例对象 3、这一个创建出来的全局单例默认就是子类的类型(son) 4、创建父类对象,也是通过alloc方法,因为单例只有一个,所以谁先调用,整个子父类创建出来的类型就是优先创建的单例对象类型

所以避免出错,对子类修改,尽量不要继承单例类。我们需要重写一遍单例代码。

到了这里就需要很深的功底:我们一般使用宏来延生单例扩展性 因为单例类里面的单例创建代码都是一样的。

#define interfaceSingle  +(instancetype)shareTool

// 这两句代码是一样的,下面可以通过你传入的名字来显示创建的单例是什么(name)类型

#define interfaceSingle(name)  +(instancetype)share##name

同理也可以实现方法实现里面的。

粘贴一段,后面的\是为了链接代码在编译过程中被识别,一定要这么做!

Paste_Image.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (1)什么是PHP,PHP脚本模式

    PHP缩写:Personal Home Page php发展历史: 95PHP/FI 、 97PHP/FI2.0 、98PHP3、 2000PHP4、2005...

    雷潮
  • Unity基础(1)-下载开发工具

    (http://upload-images.jianshu.io/upload_images/642887-454db25d255da17c.png?image...

    雷潮
  • 语法基础-C#基础语法(2)

    开发工程中:f1可以查看文档 命名空间不允许以数字开头,所以我们创建好之后,会默认在前面加_,系统加的 int a; 整数 2的10,取值范围:正负20多...

    雷潮
  • 23种设计模式之单例模式

    该单例模式在低并发的情况下可能不会出现问题,若并发量增加就可能在内存中出现多个实例,破坏了最初的预期.

    烟草的香味
  • 设计模式|06 单例模式

    权威定义:确保一个类只有一个实例,并提供一个全局访问点。 博主的理解:虽说单例模式对于许多人来说并不难,但是其中也是有很多需要注意的细节的。

    微笑的小小刀
  • 那些年,我们一起写过的“单例模式”

    本文来自:“天天P图攻城狮”公众号(ttpic_dev) 题记 度娘上对设计模式(Design pattern)的定义是:“一套被反复使用、多数人知晓的、经过分...

    腾讯Bugly
  • 设计模式之—单例模式(Singleton)的常见应用场景

    单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的...

    wangxl
  • 深入设计模式-单例模式

    单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。

    chenchenchen
  • 设计模式之单例模式

    单例模式(Sigleton Parttern)是23种设计模式中最简单也是最常见的一种设计模式,单例模式确保了一个类只有一个实例,由于内存中只有一个...

    小诸葛
  • 设计模式实战-单例模式,我就是天下无双

    大家都知道,一个对象的产生都是通过 new 关键字实现的(当然也存在其它方式,比如反射、复制等),new 的实现又是依托于构造函数的,默认一个类会自动生成一个无...

    架构师修炼

扫码关注云+社区

领取腾讯云代金券